Я хотел бы использовать awk
так:
awk 'NR<3{next} $1<1000 {system("echo 1")} $1>1000{system("echo 2")}' file
Выход
1
1
2
2
2
Это говорит ... «Если номер строки меньше, чем 3, забыть его и перейдите к следующей строке. Если первое поле меньше 1000, запустите команду echo 1
. Если первое поле больше 1000, введите команду echo 2
".
Обратите внимание, что ваш вопрос не имеет дело с числом будучи ровно 1000, так и не делает мой ответ, - но вы могли бы использовать $1<=1000
, если вы хотите, чтобы сделать это дело с 1000
Если вы действительно хотел использовать только bash
оболочки:
#!/bin/bash
{ read header
read header
while read f1 f2; do
[ $f1 -lt 1000 ] && echo 1
[ $f1 -gt 1000 ] && echo 2
done } < file
{...}
является составной оператор, который считывает file
. Внутри я читаю и отбрасываю две строки заголовка, затем вводя петлю, читающую последующие строки, на два отдельных поля: f1
и f2
. Затем я проверить значение f1
и выполнять различные echo
в зависимости от того, меньше или больше, чем 1000.
То же самое дело, как и выше с первого поля будучи точно 1000 поле - вы можете использовать -le
для «меньше или равными « и -ge
для « больше или равно ».
Или вы могли бы использовать sed
, чтобы избавиться от 2 заголовка линии, как это:
#!/bin/bash
sed '1,2d' file | while read f1 f2; do
[ $f1 -lt 1000 ] && echo 1
[ $f1 -gt 1000 ] && echo 2
done
Да, вы можете извлечь числовую часть с регулярными выражениями –
Это образец файла, у меня есть больше, чем 1000 строк, так как я могу прочитать каждую строку и проверить значение более 1000. Я понимаю, что while/for цикл я могу читать строку. Но не уверен в регулярном выражении. Возможно ли вам помочь? – user3171821