1

我有两个文本文件,file1.txt 和 file2.txt。

file1.txt 包含一个数字列表。file2.txt 还包含一个数字列表,但数量更多(很大一部分是来自 file1.txt 的数字)。这就是我想要做的:

我想从 file2.txt 中删除 file1.txt 中的所有数字,并将输出保存到 file3.txt。所以在 file3.txt 中,它将不包含 file1.txt 中的数字。我怎样才能做到这一点?

4

6 回答 6

5

这是一种使用方法awk

awk 'FNR==NR { a[$0]; next } !($0 in a)' file1.txt file2.txt > file3.txt

这会将file1读入一个数组,然后在遍历file2时,它将打印不在数组中的file2行并将它们写入输出文件。如果您有任何问题,请不要犹豫。干杯。

于 2013-01-29T05:24:45.040 回答
4

使用 GNU grep,您可以使用 ' fgrep' 模式:

grep -F -v -f file1.txt -w file2.txt > file3.txt

演示:

seq 1 30 > file2.txt
for i in 1 2 3 4 5; do echo $RANDOM; done | sed 's/\(..\).*/\1/' > file1.txt
grep -F -v -f file1.txt -w file2.txt > file3.txt

的内容file2.txt是数字 1 到 30 的行。 的内容file1.txt是 5 个半随机的 2 位数字。中的输出file3.txt是文件 2 中不在文件 1 中的行。请注意,循环生成的随机数不是很好,也没有限制为 1..30(另请参见下面的注释)。

GNU 特有的特性是grep标志-w,它匹配整个单词。有趣的是,POSIX 2008 指定-x应该与精确的行匹配,并且该-x选项对我来说可以正常工作(在 Mac OS X 10.7.5 上,但/usr/bin/grep在 GNU grep 2.5.1 上)。从理论上讲,-x它更便携。由于它也在POSIX 1997标准中,因此应该可以广泛使用。-w如果单行上有多个数字(但grep会消除整行),则该选项会更合适。

于 2013-01-29T04:03:21.613 回答
1

您只想打印 file2.txt 的唯一元素。这就是该comm实用程序的设计目的:

comm -13 <(sort file1.txt) <(sort file2.txt)

测试

$ cat file1.txt
5
4
6
2
10

$ cat file2.txt
3
7
8
2
4
1
9
10
5
6

$ comm -13 <(sort file1.txt) <(sort file2.txt)
1
3
7
8
9
于 2013-01-29T07:16:33.300 回答
1
sort file1.txt file2.txt|uniq -u > file3.txt
于 2013-01-29T02:43:11.243 回答
1

您可以使用 unix“diff”命令获取差异并过滤掉不需要的行。您可以使用--changed-group-format--unchanged-group-format选项来过滤所需的数据。

以下三个选项可用于为每个选项选择相关组:

  • '%<' 从 FILE1 获取行

  • '%>' 从 FILE2 获取行

  • ''(空字符串)用于从两个文件中删除行。

例如:

diff --changed-group-format="%>" --unchanged-group-format="" file1.txt file2.txt > file3.txt
于 2013-01-29T02:47:02.300 回答
0

你能提供更多关于这些数字是如何格式化的信息吗?他们每个人都在新线上吗?它们的位数都相同吗?

编辑:收到评论后:

while read line
do
    bool="false"
    while read secLine
    do
        if [ "$line" == "$secLine" ]
        then
            bool="true"
        fi
    done <file1
    if [ "$bool" == "false" ]
    then
         echo $line >> file3.txt
    fi
done <file2

这将起作用,尽管通过蛮力(或者它应该起作用。检查语法错误。我没有看到任何但可能有一些。)这可能需要一段时间,具体取决于你有多少数字。

于 2013-01-29T02:43:00.073 回答