如何使用awk/sed将字符串替换为多个模式?

如何使用awk/sed将字符串替换为多个模式?,awk,sed,xargs,Awk,Sed,Xargs,我有一个patternfile.txt 1 FPAT = "pata" 2 FPAT = "patb" 3 FPAT = "patc" 还有一个awkfile.txt BEGIN { FPAT } { for(i=1; i<=NF; i++){ print("%s\n", $i)} } BEGIN{FPAT} { 对于(i=1;i我有一种感觉,这有点奇怪,但我认为您可以在一次awk调用中获得所需的输出: awk '{ print "BEGIN { " subst

我有一个patternfile.txt

1 FPAT = "pata"
2 FPAT = "patb"
3 FPAT = "patc"
还有一个awkfile.txt

BEGIN { FPAT }
{
    for(i=1; i<=NF; i++){
       print("%s\n", $i)}
 }
BEGIN{FPAT}
{

对于(i=1;i我有一种感觉,这有点奇怪,但我认为您可以在一次awk调用中获得所需的输出:

awk '{ print "BEGIN { " substr($0, index($0, $2)) " }" > ("awkfile" $1 ".txt") }' patternfile.txt

这只是读取输入文件的每一行,并生成您感兴趣的部分(从第二个字段到行尾)的写入到输出文件。它使用输入的第一个字段来确定输出文件名。

我感觉这有点像是一个错误,但我认为您可以在一次调用awk中获得所需的输出:

awk '{ print "BEGIN { " substr($0, index($0, $2)) " }" > ("awkfile" $1 ".txt") }' patternfile.txt

这只是读取输入文件的每一行,并生成您感兴趣的部分(从第二个字段到行尾)的写入到输出文件。它使用输入的第一个字段来确定输出文件名。

确实不清楚您要做什么。您想要的输出是什么?您知道吗,
FPAT
是一个gawk内置变量名?这真的是您要修改的吗?如果不知道,这就是为什么您不应该将变量命名为所有upper-c例如,为了避免与您甚至不知道存在的内置变量名发生冲突。您真的不清楚您要做什么。您想要的输出是什么?您知道
FPAT
是一个笨拙的内置变量名吗?这真的是您要修改的吗?如果不知道,这就是为什么您不应该将变量命名为大写,以避免cla她有你可能不知道存在的内置变量名。@bbungbung:欢迎来到StackOverflow。一定要接受和/或向上投票的答案。看。祝你好运。这个答案肯定很有帮助。但我仍然有一个问题,除了开始部分,阅读原始awkfile的其余部分。很遗憾你已经完全改变了在我写我的答案后,您的意见是:/对不起,汤姆·弗伦奇。为了澄清我的观点,我改变了。谢谢您的回答。我对您的评论有了更多的了解。@bbungbung:欢迎来到StackOverflow。请务必接受和/或投票支持对您有帮助的答案。祝您好运。这个答案确实很有帮助。但我仍然有一个问题em阅读原始awkfile的剩余部分,除了开始部分。很遗憾,自从我写下我的答案后,你完全改变了你的输入:/抱歉,Tom French。为了澄清我的观点,我改变了。感谢你的回答。我对你的评论更加了解。
BEGIN { FPAT = "patc" }
{
     for(i=1; i<=NF; i++){
         print("%s\n", $i)}
}
awk '{ print "BEGIN { " substr($0, index($0, $2)) " }" > ("awkfile" $1 ".txt") }' patternfile.txt