
У меня есть ряд txt-файлов, каждый с многочисленными записями. Обычно я объединяю все txt-файлы в один выходной файл с помощью cat, однако это становится немного беспорядочным, потому что я не могу быть уверен, из какого исходного txt-файла он произошел.
Мне было интересно, есть ли способ, используя командную строку, сначала объединить все txt-файлы в алфавитном порядке и в то же время добавить суффикс к исходной записи, чтобы отметить файл, из которого она взята.
Например, предположим, что у меня есть 2 txt-файла, каждый из которых содержит три записи:
Файл_Один:
Alpha
Bravo
Charlie
Файл_Два:
Alpha
Bravo
Delta
Я хотел бы сделать следующее:
- Объединить два списка в один выходной текстовый файл, отсортированный в алфавитном порядке;
Добавьте суффикс, чтобы показать, из какого списка он взят:
Alpha_File_One Alpha_File_Two Bravo_File_One Bravo_File_Two Charlie_File_One Delta_File_Two
Это возможно?
решение1
Как говорит Флориан, сначала нужно добавить имя файла, а затем сортировать. Другой метод — использовать awk
:
$ awk '{printf "%s_%s\n", $0, FILENAME}' f1 f2 | sort
Alpha_f1
Alpha_f2
Bravo_f1
Bravo_f2
Charlie_f1
Delta_f2
printf
выводит аргументы в указанном формате, %s_%s\n
то есть две строки, разделенные _
и за которыми следует новая строка. $0
и FILENAME
содержат текущую строку и имя файла соответственно. В этом примере я назвал файлы f1
и f2
.
решение2
Вам нужно сделать наоборот: сначала добавить суффикс, объединить и отсортировать:
(sed 's/$/_File_One/' File_One; sed 's/$/_File_Two/' File_Two) | sort