簡體   English   中英

將文件信息添加到AWK比較

[英]Adding file information to an AWK comparison

我正在使用awk對found.txt中的文件列表執行文件比較

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文件也包含許多參數。 因此,如果我在三個文件之一中顯示了parameter35(或其他任何參數),則將其輸出拖放到Checkfile中。

這兩個腳本(您的腳本和我發布的腳本)都將為我提供輸出,但是我也想在循環中該點讀取的行中回顯。 聽起來我只能以某種方式將其引入,但是我的awk專業知識有限。

目前尚不清楚您想要什么,但可以嘗試以下操作(不需要shell循環):

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是gawk特定的,如果沒有,則添加FNR==1{ARGIND++}

將名稱傳遞到awk的變量中,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM