特定のフィールドまたはフィールド セットの 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 を使用してフィールドを更新できると思います。しかし、一度に1行ずつ行う方法は私にはわかりません。理想的には、2 つの必須パラメーター (infile と outfile) を渡してから、ハッシュして置換する任意の数のフィールド位置を渡すことができるスクリプトが必要です。あら
foo infile.txt outfile.txt 2 6 12
infile.txt を読み取り、フィールド 2、6、および 12 をハッシュし、outfile.txt に書き出します。あなたの提案は大歓迎です