linux - CSV grep 但保留标题

标签 linux csv awk grep

我有一个如下所示的 CSV 文件:

A,B,C
1,2,3
4,4,4
1,2,6
3,6,9

有没有一种简单的方法可以grep所有B列为2的行,并保留标题?例如,我希望输出像

A,B,C
1,2,3
1,2,6

我在linux下工作

最佳答案

使用 awk:

awk -F, 'NR==1 || $2==2' file

NR==1 -> 如果是第一行, $2==2 -> 如果第二列等于 2。如果以上任一条件为真,则打印行。

使用标题列名称选择列:

awk -F, -v col="B" 'NR==1{for(i=1;i<=NF;i++)if($i==col)break;print;next}$i==2'  file

将 B 替换为您要检查的列的适当名称。

关于linux - CSV grep 但保留标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072457/

相关文章:

linux - 使用 shell 获取父级 PID?

linux - GDB - 从外部 ".sym"文件加载调试信息

未执行的代码会导致段错误吗?

c# - 将 Excel 保存为管道分隔的 CSV(XlFileFormat 枚举)

awk - 从 bash 中删除与另一个文件中的行相匹配的 CSV 文件中的行?

awk - awk 中的整数除法

linux - 使用 OpenGL 3+ 进行远程 X11 转发

java - 从 CSV 读取并将数据存储到 ArrayList

c# - 使用 CSVhelper C# 合并具有不同 header 的 CSV 文件

arrays - Bash:如何从数组中提取最长的目录路径?