在Shell脚本中解析CSV字符串并将其写入文件

时间:2011-06-01 14:38:29

标签: linux shell csv

我不是Linux脚本专家,而且我已经用尽了这方面的知识。这是我的情况。

我有一个状态列表作为命令行参数传递给shell脚本(例如“AL,AK,AS,AZ,AR,CA ......”)。 Shell脚本需要提取每个状态代码并将其写入文件(states.txt),每个状态在一行中。见下文

AL
AK
AS
AZ
AR
CA
..
..

如何使用linux shell脚本实现这一目标。

提前致谢。

4 个答案:

答案 0 :(得分:5)

使用tr

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

天真的解决方案:

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

答案 3 :(得分:-1)

我认为awk是最简单的解决方案,但您可以尝试在循环中使用cut。 示例脚本(输出到stdout,但您可以重定向它):

#!/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并赋予其执行权限)