Извлечь линии, когда столбец K пуст с AWK/Perl
У меня есть данные, которые выглядят так:
foo 78 xxx
bar yyy
qux 99 zzz
xuq xyz
Они ограничены табуляцией.
Как я могу извлечь строки, где столбец 2 пуст, что дает
bar yyy
xuq xyz
Я пробовал это, но, похоже, не работает:
awk '$2==""' myfile.txt
Ответы
Ответ 1
Вам нужно специально установить разделитель полей на символ 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 (по умолчанию) в качестве специального случая. На странице man:
В специальном случае, когда FS
является одним пространством, поля разделяются пробелами пробелов и/или вкладок и/или строк новой строки. (курсив мой)
Ответ 2
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt
Переключатели команд
-
-F
сообщает Perl, какой разделитель авторасширить (вкладки в этом случае)
-
-a
включает режим авторасщепления, разбивая каждую строку на указанном разделителе для заполнения массива @F
-
-l
автоматически добавляет новую строку "\n"
в конце каждой печатной строки
-
-n
обрабатывает файл по строкам
-
-e
обрабатывает первый цитируемый аргумент как код, а не имя файла
Ответ 3
grep -e '^.*\t\t.*$' myfile.txt
Будут grep каждой строки, состоящей из символов-tab-tab-characters (ничего между вкладками).