我有CSV文件,可能是这样的:

name1;1;11880
name2;1;260.483
name3;1;3355.82
name4;1;4179.48
name1;2;10740.4
name2;2;1868.69
name3;2;341.375
name4;2;4783.9

可能有多行或少行,我需要将其拆分为多个.dat文件,每个文件都包含与此文件第二列值相同的行。(然后我将为每个.dat文件制作条形图)对于这种情况,应该是两个文件:
data1.dat
name1;1;11880
name2;1;260.483
name3;1;3355.82
name4;1;4179.48

data2.dat
name1;2;10740.4
name2;2;1868.69
name3;2;341.375
name4;2;4783.9

用bash有什么简单的方法吗?

最佳答案

可以使用awk生成只包含第二列的特定值的文件:

awk -F ';' '($2==1){print}' data.dat > data1.dat

只需更改$2==条件下的值。
或者,如果要自动执行此操作,请使用:
awk -F ';' '{print > ("data"$2".dat")}' data.dat

它将输出到包含名称中第二列的值的文件。

10-06 10:20
查看更多