Это метод, который я нашел, столкнувшись с той же проблемой:
for f in *; do mv "$f" `echo $f | tr ' ' '_'`; done
Я писал файл скрипта bash для автоматического обновления сертификатов ssl.
Следующая команда awk
изменит каждую строку ввода таким образом, что первое поле будет скопировано в новое последнее поле с префиксом тире. Затем первое поле заменяется номером строки, за которым следует точка.
awk '{ $(NF+1) = "-"; $(NF+1) = $1; $1 = NR "."; print }'
Таким образом, объединив два вызова awk
с sort | uniq -c
в исходном конвейере и пометив его в конце:
awk '
$9 ~ /^40[34]$/ { count[$7]++ }
END { for (a in count) print count[a], a }' log.txt |
sort -nr |
awk '{ $(NF+1) = "-"; $(NF+1) = $1; $1 = NR "."; print }'
Если у вас есть GNU awk
(, обычно встречающийся, например, на. Системы Linux ), выпуск 4.0 или выше, вы можете дополнительно выполнить sort -nr
в awk
также:
awk '
$9 ~ /^40[34]$/ { count[$7]++ }
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (a in count)
print ++i ".", a, "-", count[a]
}' log.txt