Если у вас есть переименование
на основе Perl (иногда известное как prename
), это действительно возможно. Если вы понимаете регулярные выражения, это даже просто.
rename -n 's!^(\d+) - (.*)\.(...)$!$2 ($1).$3!' *.avi
При этом имя исходного файла разбивается на три компонента. В первом примере это будут
Они назначены на $ 1
, $ 2
, $ 3
в команде переименовать
. (Это не переменные bash
.) Затем он снова объединяет их вместе в другом порядке.
Если вас устраивает предложенный результат, измените -n
на -v
или даже полностью удалите его.
Другой awk
подход:
$ awk -F'[- ]' '{a[$1"-"$2]+=$NF}END{for(i in a){print i,a[i]}}' file | sort
2018-02 22
2019-01 213
2018-03 13
2018-04 0
В качестве альтернативы Perl:
$ perl -lne '/(.*)-.+ (\d+)/; $k{$1}+=$2 }{ print "$_ $k{$_}" for sort keys(%k)' file
2018-02 22
2018-03 13
2018-04 9
2019-01 213
Вот еще один способ сортировки вывода без использования внешних двоичных файлов, таких какsort
:
awk '{arr[substr($0,0,7)]+=$2}END{a=asorti(arr,sort); for(i=1;i<=a;i++) print sort[i], arr[sort[i]]}' infile.
Попробуйте это
$ awk '{a[substr($0,0,7)]+=$2}END{for(b in a){print b,a[b]}}' myfile
2018-02 22
2019-01 213
2018-03 13
2018-04 9
$
Для сортировки добавьтеsort
$ awk '{a[substr($0,0,7)]+=$2}END{for(b in a){print b,a[b]}}' myfile | sort
2018-02 22
2018-03 13
2018-04 9
2019-01 213
$