从每行不同列数的csv文件中删除列

时间:2014-08-06 14:15:35

标签: bash shell csv

我有这个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

如果有人就如何提高速度提出建议,或者如果有更好的方法,那就太棒了。非常感谢!

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"