2011-06-01 120 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在本地目录,并给它执行权限)