我不是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