Текстовые файлы Morge из CLI с порядком сортировки и корнем

Текстовые файлы Morge из CLI с порядком сортировки и корнем

У меня есть ряд txt-файлов, каждый с многочисленными записями. Обычно я объединяю все txt-файлы в один выходной файл с помощью cat, однако это становится немного беспорядочным, потому что я не могу быть уверен, из какого исходного txt-файла он произошел.

Мне было интересно, есть ли способ, используя командную строку, сначала объединить все txt-файлы в алфавитном порядке и в то же время добавить суффикс к исходной записи, чтобы отметить файл, из которого она взята.

Например, предположим, что у меня есть 2 txt-файла, каждый из которых содержит три записи:

Файл_Один:

  Alpha
  Bravo 
  Charlie

Файл_Два:

  Alpha
  Bravo
  Delta

Я хотел бы сделать следующее:

  1. Объединить два списка в один выходной текстовый файл, отсортированный в алфавитном порядке;
  2. Добавьте суффикс, чтобы показать, из какого списка он взят:

       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 

Связанный контент