我正在使用gawk来获取某些值,但不是文件中的所有值。我有另一个文件是我将用来替换某个部分的模板,然后生成一个特定于我抓取的值的文件。我想用sed替换模板中的这些感兴趣的字段。
the dog NAME , likes to ACTION in water when he's bored
另一个文件f1将具有狗的名称和动作
Maxs,swim
StoneCold,digs
Thor,leaps
所以我可以抓住这些值并将它们存储到一个关联数组中...我不能做什么,或者看看,我如何将这些值添加到我的sed脚本中? 所以一个简单的sed脚本就像这样
s/NAME/ value from f1
s/ACTION/ value from f1
所以我对模板的推出将是
the dog Maxs , likes to swim in water when he's bored
因此,如果我运行了一个bash文件,该命令将看起来像这样,或者我尝试过的
gawk -f f1 animalNameAction | sed -f (is there a way to put something here) template | cat
gawk -f f1 animalNameAction > PulledValues| sed -f PulledValues template | cat
但这些都没有奏效。所以我想知道如何做到这一点。
答案 0 :(得分:2)
您可以使用awk
本身
我假设,模板可以是多行字符,
FNR==NR{}
块中,我将整个文件(模板)内容保存在变量t
中,NAME
和ACTION
。 以下是示例:
$ cat template
the dog NAME , likes to ACTION in water when he's bored
$ cat file
Maxs,swim
StoneCold,digs
Thor,leaps
$ awk 'FNR==NR{ t = (t ? t RS :"") $0; next}{ s=t; gsub(/NAME/,$1,s); gsub(/ACTION/,$2,s); print s}' template FS=',' file
the dog Maxs , likes to swim in water when he's bored
the dog StoneCold , likes to digs in water when he's bored
the dog Thor , likes to leaps in water when he's bored
更好的可读性:
awk 'FNR==NR{
t = (t ? t RS :"") $0;
next
}
{
s=t;
gsub(/NAME/,$1,s);
gsub(/ACTION/,$2,s);
print s
}
' template FS=',' file