Извлечение строк, когда столбец K пуст с помощью AWK / Perl - PullRequest
15 голосов
/ 25 мая 2010

У меня есть данные, которые выглядят так:

foo 78 xxx
bar    yyy
qux 99 zzz
xuq    xyz

Они разделены табуляцией. Как я могу извлечь строки, где столбец 2 пуст, получая

bar    yyy
xuq    xyz

Я пробовал это, но, похоже, не работает:

awk '$2==""' myfile.txt 

Ответы [ 3 ]

15 голосов
/ 25 мая 2010

Вам необходимо специально установить разделитель полей на символ 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 из ПРОБЕЛ (по умолчанию) как особого случая. Со страницы руководства:

В особом случае, когда FS - это один пробел, поля разделяются пробелами пробелов и / или табуляции и / или новых строк. (мой курсив)

5 голосов
/ 25 мая 2010
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt

Командные переключатели

  • -F сообщает Perl, какой разделитель использовать для автоматического разделения (в данном случае вкладки)
  • -a включает режим автоматического разделения, разбивая каждую строку в указанном разделителе для заполнения массива @F
  • -l автоматически добавляет новую строку "\n" в конце каждой напечатанной строки
  • -n обрабатывает файл построчно
  • -e обрабатывает первый аргумент в кавычках как код, а не имя файла
3 голосов
/ 25 мая 2010
grep -e '^.*\t\t.*$' myfile.txt

Будет отображать каждую строку, состоящую из символов-таб-таб-символов (ничего между табуляциями).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...