我有一个以下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,我想再次将它们分成较小的块
答案 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}"