我有这个file.csv:
coordinate1,coordinate2,value1
11111,a1,65
11111,a2,32
22222,b1,39
22222,b3,55
33333,c5,12
33333,c9,16
coordinate1,coordinate2,value2
54656,a1,65
21342,a2,32
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
568568,c5,12
568568,c9,16
coordinate1,coordinate2,value3
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
11111,a1,65
11111,a2,32
22222,b1,39
22222,b3,55
33333,c5,12
33333,c9,16
现在我想将这个文件分成3个文件,每个人只有数据集
Es: 1° file
coordinate1,coordinate2,value1
11111,a1,65
11111,a2,32
22222,b1,39
22222,b3,55
33333,c5,12
33333,c9,16
Es: 2° file
coordinate1,coordinate2,value2
54656,a1,65
21342,a2,32
23543,b1,39
123123,b3,55
568568,c5,12
568568,c9,16
123123,b3,55
568568,c5,12
568568,c9,16
答案 0 :(得分:20)
从this forum公然被盗:
awk '/YOUR_TEXT_HERE/{n++}{print >"out" n ".txt" }' final.txt
应该做的伎俩(当然替换YOUR_TEXT_HERE
)。
根据您的条件替换它,并使用#file.txt
的输入文件将输出发送到a.txt
:
$ awk '/coordinate1,coordinate2,value?/{n++}{print > n "file.txt" }' a.txt $ ls 1file.txt 2file.txt 3file.txt a.txt $ cat 1file.txt coordinate1,coordinate2,value1 11111,a1,65 11111,a2,32 22222,b1,39 22222,b3,55 33333,c5,12 33333,c9,16 $ cat 2file.txt coordinate1,coordinate2,value2 54656,a1,65 21342,a2,32 23543,b1,39 123123,b3,55 568568,c5,12 568568,c9,16 123123,b3,55 568568,c5,12 568568,c9,16 $ cat 3file.txt coordinate1,coordinate2,value3 23543,b1,39 123123,b3,55 568568,c5,12 568568,c9,16 123123,b3,55 23543,b1,39 123123,b3,55 568568,c5,12 568568,c9,16 123123,b3,55 11111,a1,65 11111,a2,32 22222,b1,39 22222,b3,55 33333,c5,12 33333,c9,16
答案 1 :(得分:4)
你可以使用csplit:
csplit file.txt /^c.*/ {*}
此语法适用于cygwin,但尚未尝试过。
答案 2 :(得分:2)
另一个答案的不同引用版本也适用于Windows CMD:
awk "/coordinate1,coordinate2,value?/{n++}{print>n\"file.txt\"}" a.txt