Linux 使用AWK/Perl在K列为空时提取行
我有如下数据:Linux 使用AWK/Perl在K列为空时提取行,linux,perl,unix,awk,Linux,Perl,Unix,Awk,我有如下数据: foo 78 xxx bar yyy qux 99 zzz xuq xyz 它们以制表符分隔。 如何在第2列为空的情况下提取行 bar yyy xuq xyz 我试过这个,但似乎不起作用: awk '$2==""' myfile.txt 您需要将字段分隔符专门设置为制表符: > cat qq.in foo 78 xxx bar yyy qux 99 zzz xuq
foo 78 xxx
bar yyy
qux 99 zzz
xuq xyz
它们以制表符分隔。
如何在第2列为空的情况下提取行
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
的默认行为是将空间的FS
视为特例(默认)。从手册页:
在FS
是单个空格的特殊情况下,字段由空格和/或制表符和/或换行符分隔。(我的斜体)
将grep由字符组成的每行选项卡字符(选项卡之间无任何内容)
命令开关
告诉Perl要自动拆分的分隔符(本例中为制表符)-F
启用自动拆分模式,拆分指定分隔符上的每一行以填充数组-a
@F
自动在每行打印的末尾追加一个换行符-l
“\n”
逐行处理文件-n
将第一个引用的参数视为代码而不是文件名-e
打印吗?否则,将打印一列,如aaa0bbb
。另外,对于我的shell/perl,-F
选项必须是-F'\t'
或-F'\t'
,不管perlrun怎么说,它都不像-F/\t/
。我也可以用-F=/\\t/
绕过插值,但它非常难看。您可以将tab char指定为awk选项,而不是在BEGIN子句中。这是选项卡字符的bash语法:awk-F$'\t'$2==''文件…
grep -e '^.*\t\t.*$' myfile.txt
perl -F/\t/ -lane 'print unless $F[1] eq q//' myfile.txt