私は以下の出力結果のフォーマットに問題があります。awkの問題。複数のファイルに一度に行が重複しています。
多くのファイルに行が重複しています。SHORT_LIST.a SHORT_LIST.b SHORT_LIST.cですが、さらに多くのファイルが存在する可能性があります。
"sample1"という文字列と同様に、 "test1"という行が3つのファイルすべてに存在します。
"test"という行は2つのファイルに存在しますが、ファイルの中に複数存在しますので、ファイル名ごとにこの出力を1回だけ出力したいと思います。以下
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):以下のファイルで見つかったレコード(複数可)を複製します。次のファイルに重複したレコードがあります:テスト
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 file;ソートfile2.srtファイル2; comm -12 file.srt file2.srt> file1_2.comm; awk '{print "Dupes:" $ 0}' file1_2.comm'は "ホイールを再発明"するのではなく、標準的なツールを使うことができます。あなたはそれがあなたのために仕事をすることができるかどうかを判断するために 'comm'について読む時間を取る必要があります。がんばろう。 – shellter
問題は、$ SITEFILESを介してあらかじめ決められたファイルを渡しています。開始時に大きなスクリプトに渡され、名前、日付、サイズなどで整理することができます。時々私は1つのファイルを持っているので、他の人は5000を持つことができるので、それは以前の処理の流れに依存します。 –