2011-06-01 121 views
1

我不是Linux腳本專家,我已經用盡了我對這個問題的瞭解。這是我的情況。解析Shell腳本中的CSV字符串並將其寫入文件

我有一個作爲命令行參數傳遞給shell腳本(例如「AL,AK,AS,AZ,AR,CA ...」)的狀態列表。 Shell腳本需要提取每個狀態碼並將其寫入文件(states.txt),每個狀態在一行中。見下面

AL 
AK 
AS 
AZ 
AR 
CA 
.. 
.. 

這怎麼可以用linux shell腳本實現。

在此先感謝。

回答

3
echo "AL,AK,AS,AZ,AR,CA" | awk -F, '{for (i = 1; i <= NF; i++) print $i}'; 
1

天真的解決方案:

echo "AL,AK,AS,AZ,AR,CA" | sed 's/,/\n/g' 
5

使用tr

echo "AL,AK,AS,AZ,AR,CA" | tr ',' '\n' > states.txt 
+0

感謝您的回答。這會做 – 2011-06-01 15:13:25

-1

我覺得AWK是最簡單的解決方案,但你可以嘗試在循環中使用cut。 示例腳本(輸出到標準輸出,但是你可以把它重定向):

#!/bin/bash 

# Check for input 
if ((${#1} == 0)); then 
    echo No input data supplied 
    exit 
fi 

# Initialise first input 
i=$1 

# While $i still contains commas 
while { echo $i| grep , > /dev/null; }; do 
    # Get first item of $i 
    j=`echo $i | cut -d ',' -f '1'` 

    # Shift off the first item of $i 
    i=`echo $i | cut --complement -d ',' -f '1'` 

    echo $j 
done 

# Display the last item 
echo $i 

然後,你可以運行它./script.sh "AL,AK,AS,AZ,AR,CA" > states.txt(假設你將它保存爲script.sh在本地目錄,並給它執行權限)