2016-11-24 37 views
0

我有一个.csv文件,里面充满了人物,他们的团体,他们居住的城市以及他们能够工作的那一天,这4个信息用这个“:”分隔。提取两列并在剩余的第一列中搜索特定单词而不切割剩余的单词

对于e.g

Dennis:GR1:Thursday:Paris 
Charles:GR3:Monday:Levallois 
Hugues:GR2:Friday:Ivry 
Michel:GR2:Tuesday:Paris 
Yann:GR1:Monday:Pantin 

我想切断第2和第3列,并打印含有以“s”结尾的名称的所有行,但不削减剩余2列。

对于e.g,我想有这样的事情:

Dennis:Paris 
Charles:Levallois 
Hugues:Ivry 

我想这跟grep和切断,但使用切割具有只是剩下1日结束。

我希望我能够让自己明白!

+0

确实,抱歉。我编辑了我的文章,并试图使其更清楚。 – TierOne

+0

我们是否同意这样一个事实:CSV文件是一个电子表格文件,其中包含由分隔符(通常是逗号,分号或制表符)分隔的每行的数据?对我来说是这样。在我的情况下,数据用冒号“:”分隔。 – TierOne

+0

已经给我的文件是一个.csv文件,这就是为什么我说这是一个CSV文件,否则,我不会说这个。 – TierOne

回答

0

这听起来像所有你需要的是:

$ awk 'BEGIN{FS=OFS=":"} $1~/s$/{print $1, $4}' file 
Dennis:Paris 
Charles:Levallois 
Hugues:Ivry 

为了解决您的评论请求的grep +切割液:

$ grep -E '^[^:]+s:' file | cut -d':' -f1,4 
Dennis:Paris 
Charles:Levallois 
Hugues:Ivry 

但AWK是这样做的正确方法。

+0

完美地工作,但是,可以使用与您给我的命令相同的输出,而不使用awk。例如,用grep和剪切。 – TierOne

+0

好吧,我补充说,但awk真的是这类问题的正确工具。 –

+0

grep命令不适用于我,它打印的名称不是以“s”结尾。下面是输出 蒂博的一部分:巴尼奥莱 弗雷德里克:巴黎 阿奈:巴尼奥莱 萨科:勒瓦卢瓦 席琳:埃夫里 帕特里克:巴黎 巴斯蒂安:Paris.6。 Cyril:Ivry – TierOne