我在下面的格式輸出中遇到了問題。Awk問題,一次在多個文件中重複行。
我在許多文件中有重複的行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)。複製下面的文件中找到結果:測試
SHORT_LIST.c SHORT_LIST.b SHORT_LIST.b SHORT_LIST.b
3)。複製下面的文件中找到結果:/路徑/到/文件
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)。複製下面的文件中找到結果:/路徑/到/文件
SHORT_LIST.a SHORT_LIST.c
5)。在以下文件中找到重複的記錄:testa SHORT_LIST.a SHORT_LIST.c
任何建議將不勝感激,我遇到了這個級別的AWK的麻煩。
我不確定那將怎麼樣?我需要列出重複項以及它所在的每個文件。 –
取下我原來的評論。也許像'sort -o file.srt文件;對file2.srt file2進行排序; comm -12 file.srt file2.srt> file1_2.comm; awk'{print「Dupes:」$ 0}'file1_2.comm'將允許您使用標準工具,而不是「重新發明輪子」;-)。您需要花時間閱讀'comm'來確定您是否能夠爲您輸出。祝你好運。 – shellter
事情是,我通過$ SITEFILES傳遞預定的文件,它們在開始時被傳遞到一個更大的腳本中,並且可以按名稱,日期,大小等進行排列,所以我不能只給它一些文件名字,因爲有時我會有一個文件,在其他的我可能有5000個文件,這取決於先前的處理過程。 –