我有这个bash脚本从给定csv文件的行中删除列,但运行速度非常慢。我需要将此脚本用于大于1GB的文件,因此我正在寻找更快的解决方案。
#!/bin/bash
while read line; do
columns=`echo $line | awk '{print NF}' FS=,`
if [ "$columns" == "9" ]; then
echo `echo $line | cut -d \, -f 1,5,6,8,9`
elif [ "$columns" == "24" ]; then
echo `echo $line | cut -d \, -f 1,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24`
elif [ "$columns" == "8" ]; then
echo `echo $line | cut -d \, -f 1,4,5,6,7,8`
else
echo $line
fi
done <$1
如果有人就如何提高速度提出建议,或者如果有更好的方法,那就太棒了。非常感谢!
答案 0 :(得分:1)
您的整个脚本可以由一个awk处理。
试试这个:
awk 'BEGIN{FS=OFS=","}
NF==9 {print $1, $5, $6, $8, $9; next}
NF==8 {print $1, $4, $5, $6, $8; next}
NF==24{print $1,$4,$5,$6,$8,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24} "$1"