根据匹配的单词将csv分为多个csv

时间:2019-04-19 22:59:18

标签: shell awk

我有一个以下csv

TEST,FILENAME1,COL3,COL4
AAAA,BBBBBBBB,CCCC,DDDD
DBDB,HHHDHHHD,UJUJ,UUUU
TEST,FILENAME2,COLX,COLY
1111,222222,2233,3333
33434,45566,6777,77777
jlkwj,reopwr,rewok,ewopk

我想将以上文件分成2个文件。解析期间,如果我得到一个名为TEST的关键字,我想创建一个新文件,则所有后续内容都应转到一个新文件,并且TEST关键字旁边的列应为filename

因此,上面的示例文件应拆分为

FILENAME1.csv

TEST,FILENAME1,COL3,COL4
AAAA,BBBBBBBB,CCCC,DDDD
DBDB,HHHDHHHD,UJUJ,UUUU

FILENAME2.csv

TEST,FILENAME2,COLX,COLY
1111,222222,2233,3333
33434,45566,6777,77777
jlkwj,reopwr,rewok,ewopk

是否有可以为我执行此操作的awk命令?我有很多具有此内容的csv,我想再次将它们分成较小的块

3 个答案:

答案 0 :(得分:3)

awk -F, '$1=="TEST"{close(out); out=$2".csv"} {print > out}' file.csv

答案 1 :(得分:2)

请检查以下内容:

awk -F, '{ if($1 == "TEST") file=$2} {print >> file".csv"}' example.txt

example.txt

TEST,FILENAME1,COL3,COL4
AAAA,BBBBBBBB,CCCC,DDDD
DBDB,HHHDHHHD,UJUJ,UUUU
TEST,FILENAME2,COLX,COLY
1111,222222,2233,3333
33434,45566,6777,77777

cat FILENAME1.csv

TEST,FILENAME1,COL3,COL4
AAAA,BBBBBBBB,CCCC,DDDD
DBDB,HHHDHHHD,UJUJ,UUUU

cat FILENAME2.csv

TEST,FILENAME2,COLX,COLY
1111,222222,2233,3333
33434,45566,6777,77777
jlkwj,reopwr,rewok,ewopk

如果“测试”可以出现在任何列中,而不是严格地出现在第一列中,请使用此方法:

awk -F, '/TEST/ {file=$2} {print >> file".txt"}' example.txt

答案 2 :(得分:0)

您可以尝试使用csplit:

deb='FILENAME'
fin=".csv"
csplit -s -f "$deb" -b %1d"$fin" infile  1 %^TEST% /^TEST/
rm "${deb}0${fin}"