【发布时间】:2016-05-26 00:20:58
【问题描述】:
我对下面的格式输出有疑问。
我在许多文件 SHORT_LIST.a SHORT_LIST.b SHORT_LIST.c 中有重复的行,但可能还有很多很多。
“test1”行存在于所有三个文件中,字符串“sample”也是如此。
“test”行存在于两个文件中,但在其中一个文件中存在不止一次,我想让它在每个文件名中只输出一次。
function check_duplicates {
awk 'END {
for (R in rec) {
#split out the SHORT_LIST files
n = split(rec[R], t, "/SHORT_LIST")
#printf n dup[n]
count = 0
if ( n > 2 )
dup[n] = dup[n] ? dup[n] RS sprintf( R, rec[R]) :
sprintf("\t%-20s %s ", R, rec[R]);
}
for (D in dup) {
((count++))
printf "%s\n \n", d
printf count " ). Duplicate record(s) found in the following files: " dup[D]
}
}
{
# build an array named rec (short for record), indexed by
# the content of the current record ($0), concatenating
# the filenames separated by / as values
rec[$0] = rec[$0] ? rec[$0] "\n \t" FILENAME : FILENAME
}' $SITEFILES
}
check_duplicates
当前输出如下:
在以下文件中发现重复记录:
1)。在以下文件中发现重复记录:test1
SHORT_LIST.a
SHORT_LIST.b
SHORT_LIST.c
样本
2)。在以下文件中发现重复记录:test
SHORT_LIST.c
SHORT_LIST.b
SHORT_LIST.b
SHORT_LIST.b
3)。在以下文件中发现重复记录:/path/to/file
SHORT_LIST.a
SHORT_LIST.c
睾丸
期望的输出如下:
在以下文件中发现重复记录:
1)。在以下文件中发现重复记录:test1
SHORT_LIST.a
SHORT_LIST.b
SHORT_LIST.c
2)。在以下文件中发现重复记录:示例
SHORT_LIST.a
SHORT_LIST.b
SHORT_LIST.c
3)。在以下文件中发现重复记录:test
SHORT_LIST.c
SHORT_LIST.b
4)。在以下文件中发现重复记录:/path/to/file
SHORT_LIST.a
SHORT_LIST.c
5)。在以下文件中发现重复记录:testa SHORT_LIST.a SHORT_LIST.c
任何建议都将不胜感激,我在这个级别的 AWK 上遇到了问题。
【问题讨论】:
-
我不确定这有什么帮助?我需要列出重复项及其所在的每个文件。
-
删除我原来的评论。也许像
sort -o file.srt file ; sort file2.srt file2 ; comm -12 file.srt file2.srt >file1_2.comm; awk '{print "Dupes :"$0}' file1_2.comm这样的东西可以让你使用标准工具,而不是“重新发明轮子”;-)。您必须花时间阅读有关comm的信息,以确定您是否可以使其输出适合您。祝你好运。 -
问题是,我通过 $SITEFILES 传入预定文件,它们在开始时被传递到一个更大的脚本中,并且可以按名称、日期、大小等进行排列,所以我可以'不仅仅是给它一些文件名,因为有时我会有一个文件,有时我可能有 5000 个文件,这取决于前面的处理过程。
-
@ben,发布一些示例文件会更容易为您提供帮助。
标签: linux bash awk duplicates printf