2013-10-20 17 views
1

我想學習一些使用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

我建議使用Python或Perl並使用它們的csv模塊 – Joe

回答

6

一個簡單的方法是設置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遍歷數組索引而不是數組值。

如果數據使用任何類型的轉義方法來包含逗號文字,這將不起作用。