在bash中拆分csv文件符合列值

时间:2017-03-14 11:26:36

标签: bash csv

我有一个像这样的CSV文件:

file1

field1 field2 field3 field4 
000000 nodata NP1212 1.1212
000000 212344 NP1212 1.1232  
000000 343423 NX3212 1.2342  
000000 542346 NX3212 1.6345  
000000 nodata NZ3244 1.0345 

它是制表符分隔的,大约有70000行,有23个字段,按字段3排序。如何按行拆分以创建此类输出?

file1_NP1212

field1 field2 field3 field4  
000000 nodata NP1212 1.1212  
000000 212344 NP1212 1.1232  

file1_NX3212

field1 field2 field3 field4    
000000 343423 NX3212 1.2342  
000000 542346 NX3212 1.6345  

file1_NZ3244

field1 field2 field3 field4   
000000 nodata NZ3244 1.0345 

2 个答案:

答案 0 :(得分:1)

这个int *ptr = my_rectangle; *(ptr) /= 2; *(ptr+1) /=2; 命令可以解决这个问题:

awk

答案 1 :(得分:0)

如果你想在每个输出文件中保留标题行并且对于用完文件句柄而言是强健的,那么试试这个。

awk -F '\t' 'NR == 1 { header=$0; next }
    $3 != prev { close(handle); prev = $3; handle = "file1_" $3; print header >handle }
    { print >handle }' file1

这假设输入已经在字段3上排序;如果没有,你将最终覆盖部分输出的文件。