有没有办法迭代列的值然后检查它是否存在于其他地方?

Is there a way to iterate over values of a column then check if it's present elsewhere?

我生成了 2 个 .csv 文件,一个包含目录中某些文件的原始 md5sums,另一个包含在特定时刻计算的 md5sums。

md5_original.csv
----------

                                
7815696ecbf1c96e6894b779456d330e,,s1.txt
912ec803b2ce49e4a541068d495ab570,,s2.txt
040b7cf4a55014e185813e0644502ea9,,s64.txt
8a0b67188083b924d48ea72cb187b168,,b43.txt

etc.
md5_$current_date.csv
----------

                                
7815696ecbf1c96e6894b779456d330e,,s1.txt
4d4046cae9e9bf9218fa653e51cadb08,,s2.txt
3ff22b3585a0d3759f9195b310635c29,,b43.txt

etc.
* some files could be deleted when calculating current md5sums

我希望遍历 md5_$current_date.csv 中列 $3 的值,并针对该列的每个值检查它是否存在于 md5_original.csv 中,如果存在,最后进行比较它的价值为 1 美元。

输出应该是:

s2.txt hash changed from 912ec803b2ce49e4a541068d495ab570 to 4d4046cae9e9bf9218fa653e51cadb08.
b43.txt hash changed from 8a0b67188083b924d48ea72cb187b168 to 3ff22b3585a0d3759f9195b310635c29.

我已经编写了用于构建这两个 .csv 文件的脚本,但我正在努力执行 awk 部分,我必须按照上面的要求进行操作。不知道有没有更好的方法,我是新手

我会按照以下方式使用 GNU AWK 完成此任务,令 md5_original.csv 内容为

7815696ecbf1c96e6894b779456d330e {BLANK_COLUMN} s1.txt
912ec803b2ce49e4a541068d495ab570 {BLANK_COLUMN} s2.txt
040b7cf4a55014e185813e0644502ea9 {BLANK_COLUMN} s64.txt
8a0b67188083b924d48ea72cb187b168 {BLANK_COLUMN} b43.txt

md5_current.csv内容为

7815696ecbf1c96e6894b779456d330e {BLANK_COLUMN} s1.txt
4d4046cae9e9bf9218fa653e51cadb08 {BLANK_COLUMN} s2.txt
3ff22b3585a0d3759f9195b310635c29 {BLANK_COLUMN} b43.txt

然后

awk 'FNR==NR{arr[]=;next}( in arr)&&( != arr[]){print  " hash changed from " arr[] " to " }' md5_original.csv md5_current.csv

输出

s2.txt hash changed from 912ec803b2ce49e4a541068d495ab570 to 4d4046cae9e9bf9218fa653e51cadb08
b43.txt hash changed from 8a0b67188083b924d48ea72cb187b168 to 3ff22b3585a0d3759f9195b310635c29

说明:FNR是当前文件行数,NR是全局行数,只有在处理第一个文件时才相等。在处理第一个文件时,我创建了数组 arr,因此键是文件名,值是相应的哈希值,next 导致 GNU AWK 转到下一行,即没有采取其他操作,所以休息仅适用于第一个文件以外的所有文件。 ( in arr) 是条件:当前 </code> 是 <code>arr 的键之一?如果它确实成立,我 print 当前 </code> 的连接(即文件名)<code>hash changed from 数组 arr 中键 </code> 的字符串值(即旧哈希value) <code>to string </code> (当前哈希值)。如果数组 <code>arr 中不存在给定的文件名,则不执行任何操作。 编辑:添加了对哈希的排除,它没有按照评论中的建议进行更改。

(在 gawk 4.2.1 中测试)