【问题标题】:Removing columns from a csv file with different numbers of columns per line从每行具有不同列数的 csv 文件中删除列
【发布时间】:2014-08-06 14:15:34
【问题描述】:

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

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

【问题讨论】:

    标签: bash shell csv


    【解决方案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"
    

    【讨论】:

    • 感谢 anubhava,我以前从未在 awk 中编写过代码,所以这是一个很好的例子。
    猜你喜欢
    • 2022-11-21
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2020-11-15
    • 2014-10-12
    • 2016-02-13
    相关资源
    最近更新 更多