Строки извлечения, когда Столбец K пуст с AWK/Perl

У меня есть данные, которые похожи на это:

foo 78 xxx
bar    yyy
qux 99 zzz
xuq    xyz

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

bar    yyy
xuq    xyz

Я попробовал это, но, кажется, не работаю:

awk '$2==""' myfile.txt 
15
задан neversaint 25 May 2010 в 06:30
поделиться

3 ответа

Вам необходимо специально установить разделитель полей на символ 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 из SPACE (по умолчанию) как особый случай. На странице руководства:

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

15
ответ дан 1 December 2019 в 03:13
поделиться
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt

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

  • -F сообщает Perl, какой разделитель следует автоматически разделять (в данном случае табуляция)
  • -a включает режим автоматического разделения, разделяя каждую строку на указанный разделитель для заполнения массива @F
  • -l автоматически добавляет новую строку «\ n» в конец каждой напечатанной строки
  • -n обрабатывает файл построчно
  • -e обрабатывает первый аргумент в кавычках как код, а не имя файла
5
ответ дан 1 December 2019 в 03:13
поделиться
grep -e '^.*\t\t.*$' myfile.txt

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

3
ответ дан 1 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: