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