Разделение csv-файла с помощью awk на столбец - PullRequest
0 голосов
/ 28 августа 2018

У меня есть большой CSV-файл, который я хочу разделить на меньший CSV-файл, у меня есть несколько работающее решение:

awk -F\t '{print > $2}'  big.csv

Но моя проблема в том, что я хочу, чтобы файлы имели в конце .csv, а не только столбец, как сейчас. Есть идеи?

big.csv

"a name" "type" "some more info" "and a bit more"
"a other name" "differnt-type" "more" "and a bit more"
"last name" "type" "something" "and last more"

результат, который я хочу:

type.csv

"a name" "type" "some more info" "and a bit more"
"last name" "type" "something" "and last more"

различного type.csv

"a other name" "differnt-type" "more" "and a bit more"

как сейчас, файлы будут иметь тип & другой тип без .csv.

Я также смотрел на такое решение:

tail -n +1 big.csv | while IFS=$'\t' read d1 d2 c
do
 echo $d1'\t'$d2'\t'$c >> ${d2}.csv
done

Что работает, но мучительно медленно.

1 Ответ

0 голосов
/ 28 августа 2018

Как это:

awk -F'\t' '{fname=$2".csv"; print > fname; close(fname)}' big.csv

awk будет держать выходные файлы открытыми, пока вы не вызовете close() или awk выходы. Явный вызов close(fname) гарантирует, что вы не исчерпаете файловые дескрипторы, даже если есть много различных значений $2 (что приведет к множеству открытых файлов)

Примечание. Вам необходимо заключить \t в кавычки, например: -F'\t'.

...