我有 100 个文本文件,每个文件都包含单列。这些文件是这样的:
file1.txt
10032
19873
18326
file2.txt
10032
19873
11254
file3.txt
15478
10032
11254
等等。每个文件的大小是不同的。请告诉我如何找到所有这 100 个文件中常见的数字。
我有 100 个文本文件,每个文件都包含单列。这些文件是这样的:
file1.txt
10032
19873
18326
file2.txt
10032
19873
11254
file3.txt
15478
10032
11254
等等。每个文件的大小是不同的。请告诉我如何找到所有这 100 个文件中常见的数字。
无论同一个数字是否可以在 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
awk
救援!
查找所有文件中的共同元素(假设同一文件中的唯一性)
awk '{a[$1]++} END{for(k in a) if(a[k]==ARGC-1) print k}' files
计算所有出现次数并打印 count 等于文件数的值。
具有单列的文件?
您可以使用 shell 对这些文件进行排序和比较:
for f in file*.txt; do sort $f|uniq; done|sort|uniq -c -d
last-c
不是必需的,仅当您想计算出现次数时才需要。
一个使用 Bash,comm
因为我需要知道它是否可以工作。我的测试文件是1
,2
并且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