У меня есть данные, которые похожи на это:
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
из SPACE (по умолчанию) как особый случай. На странице руководства:
В особом случае, когда
FS
является одним пробелом, поля разделяются пробегами пробелов и / или табуляции и / или новой строки. (курсив мой)
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt
Командные переключатели
-F
сообщает Perl, какой разделитель следует автоматически разделять (в данном случае табуляция) -a
включает режим автоматического разделения, разделяя каждую строку на указанный разделитель для заполнения массива @F
-l
автоматически добавляет новую строку «\ n»
в конец каждой напечатанной строки -n
обрабатывает файл построчно -e
обрабатывает первый аргумент в кавычках как код, а не имя файла grep -e '^.*\t\t.*$' myfile.txt
Будет отображать каждую строку, состоящую из символов-табуляции-табуляции-символов (ничего между табуляциями).