Разделить CSV на несколько CSV на основе подходящего слова - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть следующий 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 должен иметь имя файла

Так что в приведенном выше примере файлы должныразделить как

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, которая может сделать это для меня?У меня есть много csvs, которые имеют этот контент, и я хочу снова разделить каждый из них на более мелкие куски

Ответы [ 3 ]

3 голосов
/ 20 апреля 2019
awk -F, '$1=="TEST"{close(out); out=$2".csv"} {print > out}' file.csv
2 голосов
/ 20 апреля 2019

Пожалуйста, проверьте это:

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

Если «ТЕСТ» может появиться в любом столбце, а не строго в 1-м столбце, используйте это:

awk -F, '/TEST/ {file=$2} {print >> file".txt"}' example.txt
0 голосов
/ 20 апреля 2019

Вы можете попробовать с помощью csplit:

deb='FILENAME'
fin=".csv"
csplit -s -f "$deb" -b %1d"$fin" infile  1 %^TEST% /^TEST/
rm "${deb}0${fin}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...