我有管道分隔的文本文件,需要特定字段或一组字段的 MD5 哈希。因为我在 AIX 上并且必须使用 csum 函数,所以我认为我不能简单地将文件和散列函数传递给 awk 以一举完成。
所以我正在编写一个脚本,它读取每一行,将要散列的字段传递给 csum,然后通过 gsub 将结果作为替换返回。99% 的时间它似乎可以正常工作,但有时会因为 gsub 替换了它不应该替换的东西而发生冲突。
#!/bin/ksh
rm $2 #Get rid of output file
while read line; do #loop through each line
MYFIELD=$(echo "$line" | cut -d "|" -f 6); #push the 6th field into a var
MYHASH=$(echo $MYFIELD | csum -h MD5 -); #csum will hash a string only on the stdin
echo $line | sed -e "s/$MYFIELD/${MYHASH}/g" >> $2 #gsub replaces, but not always what we want
done < $1 #read in the input file
我认为我可以使用 awk 来更新该字段。但我无法一次完成这一行。理想情况下,我希望有一个脚本允许我传递两个强制参数(infile 和 outfile),然后传递任意数量的字段位置,这些位置将被散列和替换。阿拉
foo infile.txt outfile.txt 2 6 12
它将读入 infile.txt,散列字段 2、6 和 12,并写出到 outfile.txt。您的建议将不胜感激