У меня есть данные, которые выглядят так:
foo 78 xxx bar yyy qux 99 zzz xuq xyz
Они разделены табуляцией. Как я могу извлечь строки, где столбец 2 пуст, получая
bar yyy xuq xyz
Я пробовал это, но, похоже, не работает:
awk '$2==""' myfile.txt
Вам необходимо специально установить разделитель полей на символ TAB :
> cat qq.in foo 78 xxx bar yyy qux 99 zzz xuq xyz > cat qq.in | awk 'BEGIN {FS="\t"} $2=="" {print}' bar yyy xuq xyz
Поведение по умолчанию для awk заключается в обработке FS из ПРОБЕЛ (по умолчанию) как особого случая. Со страницы руководства:
awk
FS
В особом случае, когда FS - это один пробел, поля разделяются пробелами пробелов и / или табуляции и / или новых строк. (мой курсив)
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt
Командные переключатели
-F
-a
@F
-l
"\n"
-n
-e
grep -e '^.*\t\t.*$' myfile.txt
Будет отображать каждую строку, состоящую из символов-таб-таб-символов (ничего между табуляциями).