当 K 列为空时使用 AWK/Perl 提取行
我的数据如下所示:
foo 78 xxx
bar yyy
qux 99 zzz
xuq xyz
它们是制表符分隔的。 如何提取第 2 列为空的行,产生
bar yyy
xuq xyz
我尝试过此操作但似乎不起作用:
awk '$2==""' myfile.txt
I have data that looks like this:
foo 78 xxx
bar yyy
qux 99 zzz
xuq xyz
They are tab delimited.
How can I extract lines where column 2 is empty, yielding
bar yyy
xuq xyz
I tried this but doesn't seem to work:
awk '$2==""' myfile.txt
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要将字段分隔符专门设置为 TAB 字符:
awk
的默认行为是将FS
视为 SPACE< /kbd>(默认值)作为特殊情况。从手册页:You need to specifically set the field separator to a TAB character:
The default behaviour for
awk
is to treat anFS
of SPACE (the default) as a special case. From the man page:命令开关
-F
告诉 Perl 在什么分隔符上自动分割(本例中为制表符)-a
启用自动分割模式,在指定的位置分割每一行填充数组的分隔符@F
-l
自动在每个打印行的末尾附加换行符"\n"
-n
逐行处理文件-e
将第一个带引号的参数视为代码而不是文件名Command Switches
-F
tells Perl what delimiter to autosplit on (tabs in this case)-a
enables autosplit mode, splitting each line on the specified delimiter to populate an array@F
-l
automatically appends a newline"\n"
at the end of each printed line-n
processes the file line-by-line-e
treats the first quoted argument as code and not a filename将 grep 由字符-制表符-制表符-字符组成的每一行(制表符之间没有任何内容)。
Will grep each line consisting of characters-tab-tab-characters (nothing between tabs).