3

我有 100 个文本文件,每个文件都包含单列。这些文件是这样的:

file1.txt
10032
19873
18326

file2.txt
10032
19873
11254

file3.txt
15478
10032
11254

等等。每个文件的大小是不同的。请告诉我如何找到所有这 100 个文件中常见的数字。

相同的数字在 1 个文件中只出现一次。

4

4 回答 4

5

无论同一个数字是否可以在 1 个文件中多次出现,这都将起作用:

$ awk '{a[$0][ARGIND]} END{for (i in a) if (length(a[i])==ARGIND) print i}' file[123]
10032

以上将 GNU awk 用于真正的多维数组和 ARGIND。如有必要,可以对其他 awk 进行简单的调整,例如:

$ awk '!seen[$0,FILENAME]++{a[$0]++} END{for (i in a) if (a[i]==ARGC-1) print i}' file[123]
10032

如果每个文件中的数字是唯一的,那么您只需要:

$ awk '(++c[$0])==(ARGC-1)' file*
10032
于 2017-04-18T13:18:15.067 回答
2

awk救援!

查找所有文件中的共同元素(假设同一文件中的唯一性)

awk '{a[$1]++} END{for(k in a) if(a[k]==ARGC-1) print k}' files

计算所有出现次数并打印 count 等于文件数的值。

于 2017-04-18T12:53:14.037 回答
1

具有单列的文件

您可以使用 shell 对这些文件进行排序和比较:

for f in file*.txt; do sort $f|uniq; done|sort|uniq -c -d

last-c不是必需的,仅当您想计算出现次数时才需要。

于 2017-04-18T12:39:00.443 回答
0

一个使用 Bash,comm因为我需要知道它是否可以工作。我的测试文件是12并且3,因此是for f in ?

f=$(shuf -n1 -e ?)                     # pick one file randomly for initial comms file

sort "$f" > comms 

for f in ?                             # this time for all files
do 
  comm -1 -2 <(sort "$f") comms > tmp  # comms should be in sorted order always
  # grep -Fxf "$f" comms > tmp         # another solution, thanks @Sundeep
  mv tmp comms
done
于 2017-04-18T15:39:36.640 回答