Разбор строки CSV в Shell Script и запись ее в файл - PullRequest
1 голос
/ 01 июня 2011

Я не эксперт по сценариям Linux, и я исчерпал свои знания по этому вопросу. Вот моя ситуация.

У меня есть список состояний, переданных в качестве аргумента командной строки в сценарий оболочки (например, «AL, AK, AS, AZ, AR, CA ...»). Сценарий Shell должен извлечь каждый код состояния и записать его в файл (states.txt), в котором каждое состояние находится в одной строке. Смотри ниже

AL
AK
AS
AZ
AR
CA
..
..

Как этого добиться, используя скрипт оболочки linux.

Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 01 июня 2011

Использование tr:

echo "AL,AK,AS,AZ,AR,CA" | tr ',' '\n' > states.txt
3 голосов
/ 01 июня 2011
echo "AL,AK,AS,AZ,AR,CA" | awk -F, '{for (i = 1; i <= NF; i++) print $i}';
1 голос
/ 01 июня 2011

Наивный раствор:

echo "AL,AK,AS,AZ,AR,CA" | sed 's/,/\n/g'
0 голосов
/ 02 июня 2011

Я думаю, что 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 в локальном каталоге и дадите ему разрешение на выполнение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...