如何用csvgrep筛选CSV文件并仅输出指定列?能否通过单次命令调用实现?
如何用csvgrep筛选CSV文件并仅输出指定列?能否通过单次命令调用实现?
嘿,这个问题我太熟啦!先直接给你结论:仅靠csvgrep本身的话,没办法在单次调用里同时完成筛选行和提取指定列的操作,你之前用管道组合csvgrep + csvcut的方式,其实是csvkit官方推荐的常规做法哦。
举个你提到的例子来说:
假设你的test.csv内容是:
ok,1 ok,2 ko,3
你想要只保留第一列为ok的行的第二列,也就是输出:
1 2
你当前用的命令完全没问题:
csvgrep -H -c1 -mok test.csv | csvcut -c2 | tail -n+2
官方文档里也有类似的管道组合示例,说明这就是标准的处理方式。
不过如果你追求“单次命令调用”的话,其实可以借助csvkit里的csvpy工具,用一小段Python代码一次性完成筛选和列提取:
csvpy test.csv -c "import sys, csv; reader = csv.reader(sys.stdin); next(reader); [print(row[1]) for row in reader if row[0] == 'ok']"
这个命令会直接读取CSV文件,跳过表头(如果有的话),筛选出第一列为ok的行,然后打印第二列内容,全程只需要一次调用。
总的来说,如果只用csvgrep和csvcut这两个工具,管道组合是最优解;如果愿意结合Python脚本,就可以实现单次命令完成需求。
备注:内容来源于stack exchange,提问作者Ciro Santilli OurBigBook.com
相关产品推荐
相关产品推荐

