用于搜索空白单词的UNIX命令

时间:2014-01-31 19:10:57

标签: linux unix awk grep

在文件(制表符分隔的文本,CSV或数据库文件)中,您有名字,姓氏和地址。在某些行中,您没有姓氏,但第一个名称和地址就在那里。如何使用UNIX命令列出姓氏为空的行?

FirstName LastName街道城市 丹,上帝,第一街,芝加哥 Sam,芝加哥第二街 亚当,史密斯,芝加哥第三街

它可以是CSV,制表符分隔的文本文件(;,:)。答案应该是第2排。

3 个答案:

答案 0 :(得分:2)

假设输入文件是CSV,您可以使用awk:

awk -F, '$2 == ""' file

打印第二列(姓氏)为空的所有行。

答案 1 :(得分:1)

试试这个:

awk 'NF!=3' file

打印所有字段数不为3的行。

答案 2 :(得分:1)

由于您没有提供示例文本,我不得不对您所追求的内容进行一些猜测。

以下是我正在使用的示例文本:

06:33:20 0 1 james@brindle:/tmp$ cat sample.csv
first,last,address,otherstuff
first,,address,otherstuff
first,last,,

一个简单的grep ,,不起作用,因为它也找到了最后一行:

06:33:22 0 0 james@brindle:/tmp$ grep ,, sample.csv
first,,address,otherstuff
first,last,,

由于第一个名字字段是第一个在线,我们可以稍微简化一下这个问题:我们想找到第一个逗号后面紧跟第二个逗号的地方。

06:35:07 0 0 james@brindle:/tmp$ grep "^[^,]*,," sample.csv
first,,address,otherstuff

在该正则表达式中,第一个^将正则表达式锚定到行的开头; [^,]*匹配除逗号之外的任何字符的0次或更多次出现(是的,^在此上下文中执行的操作非常不同),最后,,匹配两个逗号。

如果你想找第三个字段是空的,你需要重复一下。

06:35:28 0 0 james@brindle:/tmp$ grep "^[^,]*,[^,]*,," sample.csv
first,last,,

在这里,您要查找0个或更多非逗号字符,后跟逗号,后跟0个或更多非逗号,后跟两个逗号。