добавить количество записей, если первая часть имени файла совпадает со следующей строкой

Это не приведет к сбою системы, но может занять много времени, так как входные данные анализируются несколько раз. Предполагая, что входной файл называется "in":

sort -u < in | while read w
do
    printf "%d\t%s\n" `grep -c "$w" in` "$w"
done

что по вашему мнению меня зацепило:

1       america
3       and
1       england
1       jerry
2       to
1       tom
1       went
-1
23.11.2020, 21:36
1 ответ

Сawk:

awk -F'[_ ]' '
    { sum_records[$1"*.csv"] +=$NF; };
END { for (x in sum_records) print x, sum_records[x]; }' infile

Мы определили разделитель полей как для подчеркивания, так и для пробела; затем для каждого того же первого поля мы суммируем количество записей, затем в блоке END {... }мы печатаем их.

Выход:

bb*.csv 4000
aa*.csv 1000

суффикс имени файла, указанный выше, мы жестко закодировали, но если у вас больше, чем просто.csv, вы можете изменить его следующим образом:

awk -F'[_.]' '
    { sum_records[$1 "*." $3]+=$NF; };
END { for (x in seen) print x, seen[x]; }' infile

обратите внимание, что мы также добавили точку .в список разделителей полей и использовали $3вместо жестко закодированного -"csv".

для входа, как показано ниже:

aa_20201123.csv 1000
bb_20201123.csv 1500
bb_20201123.txt 1234
bb_20201124.csv 2500

, что даст вам вывод следующим образом:

bb*.csv 4000
aa*.csv 1000
bb*.txt 1234
2
18.03.2021, 22:47

Теги

Похожие вопросы