我的数据如下:
foo 78 xxx
bar yyy
qux 99 zzz
xuq xyz
它们是制表符分隔的。 如何提取第2列为空的行,产生
bar yyy
xuq xyz
我试过这个但似乎不起作用:
awk '$2==""' myfile.txt
答案 0 :(得分:15)
您需要专门将字段分隔符设置为 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
是单个空格的特殊情况下,字段由空格和/或制表符和/或换行符的运行分隔。 (我的斜体)
答案 1 :(得分:5)
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt
命令开关
-F
告诉Perl自动分割的分隔符(本例中为制表符)-a
启用自动分割模式,在指定的分隔符上拆分每一行以填充数组@F
-l
会在每个打印行的末尾自动附加换行符"\n"
-n
逐行处理文件-e
将第一个引用的参数视为代码,而不是文件名答案 2 :(得分:3)
grep -e '^.*\t\t.*$' myfile.txt
将grep每行包含字符 - tab-tab-characters(标签之间没有任何内容)。