2015-01-26 63 views
1

我使用awk來執行對文件的文件比較中found.txt上市添加文件信息給AWK比較

while read line; do 
    awk 'FNR==NR{a[$1]++;next}$1 in a' $line compare.txt >> $CHECKFILE 
done < found.txt 

found.txt包含完整路徑信息爲一個數字,可能包含的文件數據。雖然我能夠確定這兩個文件中都存在這些數據,並將該數據輸出到$ CHECKFILE,但我希望能夠將find.txt(文件名)中的行放在找到該行的位置。

換句話說,我最終的東西,如:

File " /xxxx/yyy/zzz/data.txt "contains the following lines in found.txt $line

只是不知道如何讓/xxxx/yyy/zzz/data.txt信息到流。

追加澄清: 文件found.txt包含完整路徑信息的幾個文件在系統上

/path/to/data/directory1/file.txt 
/path/to/data/directory2/file2.txt 
/path/to/data/directory3/file3.txt 

每個文件有需要追加前必須檢查是否存在參數列表稍後在腳本中向他們提供更多信息。

所以例如,file.txt的包含以下字段

parameter1 = true 
parameter2 = false 
... 
parameter35 = true 

的compare.txt文件包含多個參數,以及。 因此,如果參數35(或任何其他參數)出現在三個文件中的一箇中,我會將其輸出下降到Checkfile。

這兩個腳本(你和我發佈的腳本)都會給我那個輸出,但是我也想在循環中當前正在讀取的行中回顯。聽起來像我只是能夠以某種方式管它,但我的awk專業知識是有限的。

回答

0

這不是真的清楚自己想要什麼,但試試這個(無需外殼環路):

awk ' 
ARGIND==1 { ARGV[ARGC] = $0; ARGC++; next } 
ARGIND==2 { keys[$1]; next } 
$1 in keys { print FILENAME, $1 } 
' found.txt compare.txt > "$CHECKFILE" 

ARGIND是呆子特定的,如果你沒有將它添加FNR==1{ARGIND++}

+0

感謝您的快速回復。我正在有限的Linux環境中工作,無法確定GAWK是否可用。 AWK是。在腳本的前面部分,我搜索了在'found.txt'中存儲完整路徑信息的類型的所有文件。這是我傳入比較命令的內容。在我的示例文件中,我有兩行相同的行,所以我知道該命令正在工作。我只希望能夠將當前正在讀取的行與實際數據一起輸出到「found.txt」中。 – 2015-01-26 19:20:13

+0

我明白所有這一切,我相信我發佈的答案可以解決您的問題,並將其增強爲不需要shell循環。 – 2015-01-26 19:29:02

+0

埃德,我試着你提供的命令,並得到相同的輸出。它打印樣本集中三個文件之一中找到的行,但不會告訴我該行來自哪個文件。 – 2015-01-26 19:37:42

0

傳遞名字變成awk一個變量中是這樣的:

awk -v file="$line" '{... print "File: " file }' 
+0

我能夠得到這個命令將行轉儲到屏幕上,但不會將其追加到文件輸出。不知道爲什麼。 – 2015-01-26 20:09:47