【问题标题】:Bash processing of csv file with unknown number of columns具有未知列数的csv文件的bash处理
【发布时间】:2013-10-20 23:16:00
【问题描述】:

我正在尝试学习一些使用 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

【问题讨论】:

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

标签: bash csv


【解决方案1】:

一种简单的方法是设置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 循环遍历数组索引而不是数组值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多