当列K空AWK / Perl时提取行

我有这样的数据:

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的默认行为是将SPACEFS (默认值)视为特殊情况。 从手册页:

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每行包含字符 – 制表符 – 制表符(标签之间没有任何内容)。