Граждане, сломал моск, хоть тема и баян...
В общем, суть в файлике такого вида:$ head codes
200
200
304
302
200
500
200
301
404
200Строк в нем много.
Я хочу получить в переменную строку вида:
"100899 200", "9 301", "46908 302", "14378 304", "493 404", "11 500"
А еще лучше получить сразу массивом codes, где, к примеру, codes[0]="100899 200"Дошел до такого:
$ cat sorter.sh
#!/usr/local/bin/bash
sort codes | uniq -c | while read -r i; do
f="`
if [ -n "$f" ]; then
echo "\$f, "
fi
`\"$i\""
echo "$f"
done
$ ./sorter.sh
"100899 200"
"100899 200", "9 301"
"100899 200", "9 301", "46908 302"
"100899 200", "9 301", "46908 302", "14378 304"
"100899 200", "9 301", "46908 302", "14378 304", "493 404"
"100899 200", "9 301", "46908 302", "14378 304", "493 404", "11 500"
Но никакие шаманства не помогли получить содержимое $f из последней итерации while после done.Помогите советом, плз. (:
переменная f не доступна потому что тут вызывается несколько вложеных процессов.
когда команда вызываетс через | то стартует новый процесс и f определена в самом последнем.
когда цикл закончился то переменая ушал вместе с процесом.
Можно внутри цикла посылать f в файл и потом сделать tail -n1 па этот файл.ещё можно сделать в одну строку:
$ sort codes | uniq -c | xargs | sed 's/\([^ ]\+\) \+\([^ ]\+\)/"\1 \2",/g' | sed "s/,$//"