我有管道分隔的文本文件,需要特定字段或字段集的MD5散列。因爲我在AIX上並且必須使用csum函數,所以我不認爲我可以簡單地通過文件和哈希函數awk來一舉完成。結合awk和csum來散列字段
因此,我正在編寫一個腳本,通過讀取每一行,將需要哈希的字段傳遞給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。 你的建議將不勝感激
您是否嘗試過打印'sed'線,看是否參數替換是否正確完成?有些東西像'echo'$ line \ | sed -e \「s/$ MYFIELD/$ {MYHASH}/g」' – fedorqui 2013-03-16 19:22:00
@fedorqui替換似乎在大多數情況下都能正常工作。被散列包含一組匹配另一個我不想散列的字段的字符,例如,donthashit | foo1 | bar1 | foo2 | bar2 | hashit將散列字段6,但sed在第一個字段和這是一個問題,因爲我只希望它操作字段6. – 2013-03-16 19:34:54
如果你指出'/ g'它會在每次找到它時改變它。你有任何模式來區分它們嗎? – fedorqui 2013-03-16 19:44:27