Я зацикливание над серией больших файлов со сценарием оболочки:Awk: цикл и сохранить разные строки в разные файлы?
i=0
while read line
do
# get first char of line
first=`echo "$line" | head -c 1`
# make output filename
name="$first"
if [ "$first" = "," ]; then
name='comma'
fi
if [ "$first" = "." ]; then
name='period'
fi
# save line to new file
echo "$line" >> "$2/$name.txt"
# show live counter and inc
echo -en "\rLines:\t$i"
((i++))
done <$file
Первый символ в каждой строке будет либо буквенно-цифровой, или один из определенных выше символов (поэтому я переименование их для использования в имени выходного файла).
Это слишком медленно.
5 000 строк занимает 128 секунд.
На этом уровне у меня есть твердый месяц обработки.
Будет ли awk быстрее работать здесь?
Если да, то как я вписываю логику в awk?
'$ []' является устаревшим, используйте '((я ++)) или' ((я + = 1)) '. Кроме того, когда вы 'echo' переменная (и чаще всего используете переменную), вы должны ее процитировать:' echo '$ LINE "'. И лучше всего использовать имена переменных в нижнем регистре или смешанном регистре, чтобы избежать потенциального столкновения имен с переменными оболочки или среды. –
@DennisWilliamson спасибо. Обновлено. – HappyTimeGopher