在文件(制表符分隔的文本,CSV或数据库文件)中,您有名字,姓氏和地址。在某些行中,您没有姓氏,但第一个名称和地址就在那里。如何使用UNIX命令列出姓氏为空的行?
FirstName LastName街道城市 丹,上帝,第一街,芝加哥 Sam,芝加哥第二街 亚当,史密斯,芝加哥第三街
它可以是CSV,制表符分隔的文本文件(;,:)。答案应该是第2排。
答案 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个或更多非逗号,后跟两个逗号。