使用AWK / Perl在列K为空时提取行

时间:2010-05-25 06:24:04

标签: linux perl unix awk

我的数据如下:

foo 78 xxx
bar    yyy
qux 99 zzz
xuq    xyz

它们是制表符分隔的。 如何提取第2列为空的行,产生

bar    yyy
xuq    xyz

我试过这个但似乎不起作用:

awk '$2==""' myfile.txt 

3 个答案:

答案 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(标签之间没有任何内容)。