我正在尝试使用bash学习一些文本处理.
如何使bash脚本读取和处理具有未知列数的CSV文件,第一行作为列标题?
输入示例:
column1,column2,...,columnn
value11,value12,...,value1n
value21,value22,...,value2n
...
valuem1,valuem2,...,valuemn
Run Code Online (Sandbox Code Playgroud)
输出:
column1: value11
column2: value12
...
columnn: value1n
column1: value21
column2: value22
...
columnn: value2n
...
column1: valuem1
column2: valuem2
...
columnn: valuemn
Run Code Online (Sandbox Code Playgroud)
一种简单的方法是设置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
Run Code Online (Sandbox Code Playgroud)
会发生的是第一行被读入一维数组$line,根据其中的字符进行分割$IFS.当有可用输入时,后续行以相同方式读取,并且!in "${!line[@]}"指示bash循环遍历数组索引而不是数组值.
如果数据使用任何类型的转义方法来包含逗号文字,则这将不起作用.
| 归档时间: |
|
| 查看次数: |
2486 次 |
| 最近记录: |