/ / Analizar una cadena CSV en el script de shell y escribirla en un archivo - linux, shell, csv

Analizar una cadena CSV en Shell Script y escribirla en un archivo - linux, shell, csv

No soy un experto en scripts de Linux y he agotado mi conocimiento sobre este asunto. Aquí está mi situación.

Tengo una lista de estados aprobados como línea de comando.argumento a un script de shell (por ejemplo, "AL, AK, AS, AZ, AR, CA ..."). El script de Shell necesita extraer cada código de estado y escribirlo en un archivo (states.txt), con cada estado en una línea. Vea abajo

AL
AK
AS
AZ
AR
CA
..
..

¿Cómo se puede lograr esto usando un script de shell de Linux?

Gracias por adelantado.

Respuestas

5 para la respuesta № 1

Utilizar tr:

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

3 para la respuesta № 2
echo "AL,AK,AS,AZ,AR,CA" | awk -F, "{for (i = 1; i <= NF; i++) print $i}";

1 para la respuesta № 3

Solución ingenua:

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

-1 para la respuesta № 4

Creo que awk es la solución más simple, pero podrías intentar usar cut en un bucle. Ejemplo de secuencia de comandos (salidas a la salida estándar, pero solo puede redirigirlo):

#!/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

Entonces puedes ejecutarlo como ./script.sh "AL,AK,AS,AZ,AR,CA" > states.txt (Suponiendo que lo guarde como script.sh en el directorio local y le dé permiso de ejecución)