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

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

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

我想知道是否有一种方法,使用命令行,首先按字母顺序合并所有 txt 文件,同时将后缀添加到原始条目以注明其来源文件。

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

文件一

  Alpha
  Bravo 
  Charlie

文件_二

  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

正如 Florian 所说,您应该先添加文件名,然后排序。另一种方法是使用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 

相关内容