nev*_*int 15 unix linux perl awk
我的数据看起来像这样:
foo 78 xxx
bar    yyy
qux 99 zzz
xuq    xyz
它们是制表符分隔的.如何提取第2列为空的行,让步
bar    yyy
xuq    xyz
我试过这个,但似乎不起作用:
awk '$2==""' myfile.txt 
pax*_*blo 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是一个单一的空间,字段由分离运行的空间和/或突出部和/或换行.(我的斜体)
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt
命令开关
-F 告诉Perl自动分割的分隔符(在这种情况下为制表符)-a 启用自动分割模式,在指定的分隔符上拆分每一行以填充数组 @F-l自动"\n"在每个打印行的末尾添加换行符-n 逐行处理文件-e 将第一个引用的参数视为代码而不是文件名