Bash 在循环内使用awk替换字段

Bash 在循环内使用awk替换字段,bash,shell,sed,awk,Bash,Shell,Sed,Awk,我编写了一个脚本,从字典中查找哈希值,并以“word:md5sum”的形式输出每个单词。然后我有一个名称文件,我想用它来放置每个名称,后跟每个散列值,即。 汤姆:word1hash 汤姆:word2hash . . 鲍勃:word1hash 等等。一切正常,但我想不出替代品。这是我的剧本 $#!/bin/bash #/etc/dictionaries-common/words cat words.txt | while read line; do echo -n "$line:" >>

我编写了一个脚本,从字典中查找哈希值,并以“word:md5sum”的形式输出每个单词。然后我有一个名称文件,我想用它来放置每个名称,后跟每个散列值,即。 汤姆:word1hash 汤姆:word2hash . . 鲍勃:word1hash

等等。一切正常,但我想不出替代品。这是我的剧本

$#!/bin/bash
#/etc/dictionaries-common/words
cat words.txt | while read line; do echo -n "$line:" >> dbHashFile.txt  
echo "$line" | md5sum | sed 's/[ ]-//g' >> dbHashFile.txt; done
cat users.txt | while read name
do
cat dbHashFile.txt >> nameHash.txt;
awk '{$1="$name"}' nameHash.txt;
cat nameHash.txt >> dbHash.txt;
done
线路

    $awk '{$1="$name"}' nameHash.txt;
这是我尝试替换的地方


感谢您的帮助

尝试将最后一个循环的全部内容(包括
cat
s和
awk
)替换为:


非常感谢。它工作得很好。我希望我能+1你。因此,当在awk表达式中使用时,必须重新声明变量?awk不会从环境中获取变量,不会。当然,您也可以执行
awk-F:{print“'“$name””“:“$2}”
。(至于+1,我相信您仍然可以通过单击复选标记来接受答案,如果它对您有效,您应该这样做。=)
awk -v name="$name" -F ':' '{ print name ":" $2 }' dbHashFile.txt >>dbHash.txt