我有一系列 txt 文件,每个文件都包含许多条目。我通常使用 cat 将所有 txt 文件合并为一个输出文件,但是这样会变得有点混乱,因为我无法确定它来自哪个原始 txt 文件。
我想知道是否有一种方法,使用命令行,首先按字母顺序合并所有 txt 文件,同时将后缀添加到原始条目以注明其来源文件。
例如,假设我有 2 个 txt 文件,每个文件有三个条目:
文件一:
Alpha
Bravo
Charlie
文件_二:
Alpha
Bravo
Delta
我想要做的是这样的:
- 将两个列表合并到一个按字母顺序排序的输出 txt 文件中;
添加后缀来显示它来自哪个列表:
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