Это одна строка входного файла:
FOO BAR 0,40 0,20 0,40 0,50 0,60 0,80 0,50 0,50 0,50 -43,00 100010101101110101000111010
И команда awk, которая проверяет определенную позицию, является ли она «1» или «0» в столбце 13. Что-то вроде:
awk -v values="${values}" '{if (substr($13,1,1)==1) printf values,$1,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13}' foo.txt > bar.txt
Переменная значений работает, но я просто хочу в приведенном выше примере проверить, равен ли первый бит «1».
ИЗМЕНИТЬ
Итак, я думаю, что я не очень ясно выразился в своем вопросе. «$13» в методе substr на самом деле является битовой строкой. Итак, этот awk хочет передать все строки в foo.txt, которые имеют «1» в позиции «1» битовой строки в столбце «$13». Надеюсь, это проясняет ситуацию.
ИЗМЕНИТЬ 2
Хорошо, позвольте мне сломать это очень легко. Приведенный выше код является примером, поэтому строка ввода является одной из МНОГИХ строк. Таким образом, не все строки имеют 1 в позиции 8. Я дважды проверил, имеет ли определенная позиция оба вхождения, так что в любом случае я должен получить какой-то результат. Дело в том, что во всех строках он не находит «1» в выбранных мною позициях, но когда я говорю, что он должен найти «0», он возвращает мне все строки.
printf values,$0
) - person Dennis Williamson   schedule 19.04.2010if (substr($13,8,1)==1) printf ...
? Это должно сработать. - person Dennis Williamson   schedule 19.04.2010if
становится истинным, если вы делаетеif (substr($13,8,1)==0
! вы делаете это очень запутанным. показать результат, который вы хотели. - person ghostdog74   schedule 19.04.2010