Предположим, что ваш файл имеет название test1
Вся команда выглядит так (в одну строку):
names=$(cat test1 | sed -n "/[a-zA-Z]/p" | sed "s/$/;/g") && names2=($) && for var in "$"; do numbers=$(cat test1 | sed -n "/$var/" | sed "s/\s/;/g"); numbers2=($); for num in "$"; do echo "$var,$num"; done; done
Для лучшего просмотра посмотрите на этот скрипт:
names=$(cat test1 | sed -n "/[a-zA-Z]/p" | sed "s/$/;/g") names2=($) for var in "$"; do numbers=$(cat test1 | sed -n "/$var/" | sed "s/\s/;/g") numbers2=($) for num in "$"; do echo "$var,$num" done done
Теперь я хочу описать все части команды
ОПИСАНИЕ КОМАНДЫ
Команда names=$(cat test1 | sed -n "/[a-zA-Z]/p" | sed "s/$/;/g")
дает мне список имен, разделенных точкой с запятой, в вашем случае Kerala;Delhi;Goa
. Я хочу их в этой форме, потому что теперь я могу изменить их в массив с помощью второй команды names2=($)
. Теперь я перебираю все имена, что делается с помощью первого for
цикла.
Команда numbers=$(cat test1 | sed -n "/$var/" |sed "s/\s/;/g");
дает мне номера для текущей переменной $var
. Т.е. для Kerala
этого было бы 4222;8129;8163;8164
. Поведение такое же, как и в первой команде: я хочу изменить их в массив, чтобы я мог их перебирать, что делается с помощью следующей команды numbers2=($);
. Теперь я перебираю числа и печатаю их на экране
for num in "$"; do echo "$var,$num"; done
Надеюсь это понятно.