我有这样的数据:
foo 78 xxx bar yyy qux 99 zzz xuq xyz
他们是制表符分隔。 我怎样才能提取第2列是空的行,yielding
bar yyy xuq xyz
我试过这个,但似乎没有工作:
awk '$2==""' myfile.txt
您需要专门将字段分隔符设置为一个制表符:
> 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
的默认行为是将SPACE的FS
(默认值)视为特殊情况。 从手册页:
在
FS
是单个空间的特殊情况下,字段被空格和/或制表符和/或换行符分隔。 (我的斜体)
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt
命令开关
-F
告诉Perl什么分隔符autosplit(在这种情况下标签) -a
启用自动分割模式,分割指定分隔符上的每一行以填充数组@F
-l
在每个打印行的末尾自动附加换行符"\n"
-n
逐行处理文件 -e
将第一个引用的参数视为代码而不是文件名 grep -e '^.*\t\t.*$' myfile.txt
将grep每行包含字符 – 制表符 – 制表符(标签之间没有任何内容)。