使用排序顺序和根目录从 CLI 合并文本文件

sim*_*ind 1 command-line text-processing

我有一系列 txt 文件,每个文件都有许多条目。我通常使用 cat 将所有 txt 文件合并到一个输出文件中,但是它变得有点混乱,因为我无法确定它来自哪个原始 txt 文件。

我想知道是否有办法使用命令行首先按字母顺序合并所有 txt 文件,同时将后缀添加到原始条目以记录它来自的文件。

例如,假设我有 2 个 txt 文件,每个文件包含三个条目:

文件一

  Alpha
  Bravo 
  Charlie
Run Code Online (Sandbox Code Playgroud)

文件_二

  Alpha
  Bravo
  Delta
Run Code Online (Sandbox Code Playgroud)

我想做的是:

  1. 将两个列表合并在一个按字母顺序排序的输出 txt 文件中;
  2. 添加后缀以显示它来自哪个列表:

       Alpha_File_One
       Alpha_File_Two
       Bravo_File_One
       Bravo_File_Two
       Charlie_File_One
       Delta_File_Two
    
    Run Code Online (Sandbox Code Playgroud)

这可能吗?

mur*_*uru 5

正如弗洛里安所说,您应该首先添加文件名,然后进行排序。另一种方法是使用awk

$ awk '{printf "%s_%s\n", $0, FILENAME}' f1 f2 | sort
Alpha_f1
Alpha_f2
Bravo_f1
Bravo_f2
Charlie_f1
Delta_f2
Run Code Online (Sandbox Code Playgroud)

printf以指定格式打印参数,%s_%s\n这意味着两个字符串_由换行符分隔并后跟换行符。$0并分别FILENAME包含当前行和文件名。在此示例中,我已将文件命名为f1f2