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

列数未知的csv文件的Bash处理,bash,csv,Bash,Csv,我正在尝试使用bash学习一些文本处理 如何制作bash脚本来读取和处理具有未知列数且第一行作为列标题的CSV文件 输入示例: column1,column2,...,columnn value11,value12,...,value1n value21,value22,...,value2n ... valuem1,valuem2,...,valuemn 输出: column1: value11 column2: value12 ... columnn: value1n column1:

我正在尝试使用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

一种简单的方法是设置
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[@]}”中的code>指示bash在数组索引而不是数组值上循环


如果数据使用任何类型的转义方法来包含逗号文本,这将不起作用。

我建议使用Python或Perl并使用它们的csv模块