我有多个CSV文件
> File 1
name,age,city
john,30,NY
cassey,25,SF
nick,25,DC
> File 2
attended,days
math,30
phy,25
che,25
> File 3
days, weeks
30, 4
20, 5
我想搜索一个条目,当我得到它时,我想在第一个条目处停下来。但是,我也想打印文件的第一行,因为它是CSV格式,它将帮助我了解列的名称
如果我搜索25,则所需的输出是
File 1:
name,age,city
cassey,25,SF
File 2:
attended,days
phy,25
使用以下代码,我可以打印
# grep -m 1 25 * -rn
cassey,25,SF
phy,25
如何将grep输出输出到sed或其他实用程序,以便我可以在输出中打印第一列和匹配的列。
您可以使用sed
而不是grep。使用ls
和xargs
处理许多文件:
ls file* | xargs -n1 sed -n '1{x;d}; /25/{x;p;x;p;q}'
所有'x; p'的原因是,如果在文件中未找到模式,则不打印第一行。
文件1:
name,age,city
cassey,25,SF
文件2:
attended,days
phy,25
at,25
文件3:
attended,days
phy,26
结果:
$ ls file* | xargs -n1 sed -n '1{x;d}; /25/{x;p;x;p;q}'
name,age,city
cassey,25,SF
attended,days
phy,25
编辑:打印文件名-现在是正确的bash循环:
$ for i in `grep -l 25 file*` ; do echo $i; head -n1 $i; grep -m1 25 $i; done
file1
name,age,city
cassey,25,SF
file2
attended,days
phy,25
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句