我不是Linux腳本專家,我已經用盡了我對這個問題的瞭解。這是我的情況。解析Shell腳本中的CSV字符串並將其寫入文件
我有一個作爲命令行參數傳遞給shell腳本(例如「AL,AK,AS,AZ,AR,CA ...」)的狀態列表。 Shell腳本需要提取每個狀態碼並將其寫入文件(states.txt),每個狀態在一行中。見下面
AL
AK
AS
AZ
AR
CA
..
..
這怎麼可以用linux shell腳本實現。
在此先感謝。
我不是Linux腳本專家,我已經用盡了我對這個問題的瞭解。這是我的情況。解析Shell腳本中的CSV字符串並將其寫入文件
我有一個作爲命令行參數傳遞給shell腳本(例如「AL,AK,AS,AZ,AR,CA ...」)的狀態列表。 Shell腳本需要提取每個狀態碼並將其寫入文件(states.txt),每個狀態在一行中。見下面
AL
AK
AS
AZ
AR
CA
..
..
這怎麼可以用linux shell腳本實現。
在此先感謝。
echo "AL,AK,AS,AZ,AR,CA" | awk -F, '{for (i = 1; i <= NF; i++) print $i}';
天真的解決方案:
echo "AL,AK,AS,AZ,AR,CA" | sed 's/,/\n/g'
使用tr
:
echo "AL,AK,AS,AZ,AR,CA" | tr ',' '\n' > states.txt
我覺得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在本地目錄,並給它執行權限)
感謝您的回答。這會做 – 2011-06-01 15:13:25