我有一个很大的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"
different-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
哪个有效,但速度缓慢。
答案 0 :(得分:0)
赞:
awk -F'\t' '{fname=$2".csv"; print > fname; close(fname)}' big.csv
awk
将保持输出文件打开,直到您调用close()
或awk
退出。明确调用close(fname)
可确保即使$2
有许多不同的值(这会导致打开许多文件),您也不会耗尽文件描述符。
注意:您需要将\t
用引号引起来,例如:-F'\t'
。