有没有办法迭代列的值然后检查它是否存在于其他地方?
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 中测试)
我生成了 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 中测试)