Text-Processing

如何從多個文件中找到共同的數字?

  • January 26, 2020

我想提取所有文件中存在的公共數字。我在文件夾中有 1000 個文件。我想比較所有文件號並找出 1000 個文件中的通用號。我使用了以下程式碼:

for ((i=2;i<=10000;i++))  
do
comm -12 --nocheck-order a.txt "$i".txt > final.txt
mv final.txt file.txt
done

但它只是過度寫入和比較最後一個文件與 a.txt。但我希望所有文件中都存在通用數字。

假設一個 .txt 文件:

1

3

47

8

6

7

1.txt 文件:

2

3

6

7

8

2.txt文件:

3

5

6

7

9

3.txt 和 4.txt….1000.txt。如果這適用於這 3 個文件,它應該適用於所有文件。在這個文件中很常見的是:

3

7

當它給我的時候

3

8

3

請讓我知道我該如何進行?

假設每個數字在文件中只能出現一次:

$ awk '{c[$1]++} END{for (i in c) if (c[i] == (ARGC-1)) print i}' a.txt {1..2}.txt
3
6
7

comm僅適用於已排序的文件,

逐行比較已排序的文件 FILE1 和 FILE2。

來源:https ://linux.die.net/man/1/comm

因此該算法不適用於未排序的文件。這有效:

#!/bin/sh

sort -n a.txt > tmp.txt

END=4

for i in `seq 2 $END`
do
comm -12 --nocheck-order tmp.txt $i.txt |tee tmp.txt
done
cp tmp.txt "final.txt"

|tee您還可以在某些系統上使用運算符代替>(寫入文件並覆蓋它)

引用自:https://unix.stackexchange.com/questions/563796