Вопрос: Morge текстовые файлы из CLi с порядком сортировки и root


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

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

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

File_One:

  Alpha
  Bravo 
  Charlie

File_Two:

  Alpha
  Bravo
  Delta

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

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

       Alpha_File_One
       Alpha_File_Two
       Bravo_File_One
       Bravo_File_Two
       Charlie_File_One
       Delta_File_Two
    

Это возможно?


1
2017-10-12 00:48


Источник


Используйте форматирование кода, чтобы отформатировать ваши входные файлы и выводить их точно так, как они должны появиться, пожалуйста. - muru
Извините, муру не уверен, что вы просите (я не эксперт по клику), но именно так я бы хотел, чтобы он был в выходном файле. - simple mind
Я не говорю о CLI. Я говорю о форматировании вопроса. Видеть askubuntu.com/editing-help#code, Например, есть ли у ваших файлов точки с запятой? - muru
Ок, ты. Сделал поправки к моему вопросу. - simple mind


Ответы:


Как говорит Флориан, сначала нужно добавить имя файла, а затем отсортировать его. Другим методом является использование 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, в этом примере.


4
2017-10-12 01:04





Вам нужно сделать это наоборот: сначала добавьте суффикс, den merge и sort:

(sed 's/$/_File_One/' File_One; sed 's/$/_File_Two/' File_Two) | sort 

1
2017-10-12 00:58



@muru: Спасибо, удалили их тоже. - Florian Diesch