Bash处理具有未知列数的csv文件

时间:2013-10-20 23:16:01

标签: bash csv

我正在尝试使用bash学习一些文本处理。

如何使用bash脚本读取和处理包含未知列数的CSV文件,第一行作为列标题?

示例输入:

column1,column2,...,columnn
value11,value12,...,value1n
value21,value22,...,value2n
...
valuem1,valuem2,...,valuemn

输出:

column1: value11
column2: value12
...
columnn: value1n

column1: value21
column2: value22
...
columnn: value2n

...

column1: valuem1
column2: valuem2
...
columnn: valuemn

1 个答案:

答案 0 :(得分:8)

一种简单的方法是设置IFS=,并使用read -a读取数组:

#!/bin/bash
IFS=','
read -a headers
while read -a line; do
    for i in "${!line[@]}"; do
        echo "${headers[i]}: ${line[i]}"
    done
done

第一行被读入一维数组$line,根据$IFS中的字符进行分割。当有可用输入时,后续行以相同方式读取,!中的"${!line[@]}"指示bash循环遍历数组索引而不是数组值。

如果数据使用任何类型的转义方法来包含逗号文字,则无效。