Файлы по вашему вопросу отсортированы.
Если исходные файлы действительно отсортированы, вы можете уникировать и объединить их за один шаг :
sort -um file1 file2 > mylist.merge
Для числовой сортировки (, а не буквенно-цифровой ), используйте:
sort -num file1 file2 > mylist.merge
Это могло не быть сделано в -месте (, перенаправленном на один исходный файл ).
Если файлы не отсортированы, отсортируйте их (эту сортировку можно выполнить на месте, используя опцию сортировки -o
. Однако весь файл должен быть загружен в память ):
sort -uo file1 file1
sort -uo file2 file2
sort -um file1 file2 > mylist.merge
mv mylist.merge originallist
Это было бы быстрее, чем более простая «одна командная строка» для сортировки всех:
cat file1 file2 | sort -u >mylist.merge
Однако эта строка может быть полезна для небольших файлов.
Предполагая, что /path/to/input-file
содержит список, который вы упомянули в своем посте,мы могли бы использовать:
awk 'BEG{name="";count=0}{if ($0 == "") { print name "=" count; name = ""; count=0; } else { if (name == "") { name = $0; } else {count = count + 1} }}END{print name "=" count;}' /path/to/input-file
Alya Grant=2
Ava=3
Samia=4
В awk используйте последовательность пустых строк в качестве разделителя записей и новой строки в качестве разделителя полей . Тогда на выходе будет только первое поле и количество полей минус 1.
awk '
BEGIN {FS = "\n"; RS = ""; OFS = "="}
{ print $1, NF - 1 }
' file1.txt