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