我知道
awk '!seen[$0]++' filename > output.txt
可以从文本文件中删除所有重复项。但是我如何获取已删除行的列表,以便使用此信息删除另一个文件中的相同行。
我需要这个,因为我想删除用一种语言编写的大型文本文件中的所有重复项,然后使用该语言的翻译删除文件中的相同行,而不会丢失翻译的匹配。
为了更清楚:(文件 1)
line A
line B
line A
line C
...
(文件 2):
line 1
line 2
line 3
line 4
...
从文件 1 中删除“line A”并从文件 2 中删除“line 3”。需要翻译:
line A -> line 1
line B -> line 2
line C -> line 4
...
文件 1B(已删除重复项)将如下所示:
line A
line B
line C
...
文件 2B(已删除重复项)将如下所示:
line 1
line 2
line 4
...
这将使用程序重现问题中间的输出
awk
。程序读取第一个文件 (
file1
) 并在第一个块中找到重复的行。该块还保存要保留在数组中keep
的行,按行号索引。在读取第二个文件(代码中的第二个块)时,如果行号是我们想要保留的行号,则将第一个文件中保存的行与第二个文件中的行一起输出。
保存两个新文件的变体:
这将
file1.new
仅使用 中的唯一行file1
写入,并且将file2.new
使用相同的行写入,但来自file2
。此解决方案的唯一缺点是它需要 2 个
x
内存,其中x
是第一个文件中唯一行的数量,即,它将存储每个唯一行的两个副本(作为数组file1
中的索引seen
和值)。keep
这是一个两步的过程:
一个 awk 脚本来生成一个 sed 脚本来删除不需要的行
然后使用 sed 脚本删除所需文件中的行