2013-02-12 122 views
0

我想打印输出,它是多个文件内容的组合。awk - 从多个来源分配变量

实施例:

grep -v 'word' FILE_A | awk -v var1="string1" -v var2="string2" -v var3="string3" 
'{ print $1 var1 var2 var3}' 

我可以用命令执行此以上:分配特定的字符串变量,并与grep“编辑内容打印。
但是,如果string1/2/3很长,分配这么长的单词就相当复杂。

问:

如果我会写string1/2/3为单行的File_B我怎么能分配等FILE_B线作为变量?

例子:

cat File_B 
string1 
string2 
string3 

回答

2

为什么不把它所有在awk脚本,而不是仅仅变量:

$ cat script.awk 
!/word/ { 
    var1="string1" 
    var2="string2" 
    var3="string3longlonglonglonglonglong" 
    print $1,var1,var2,var3 
} 

$ cat file 
word no match 
match1 
word no match 
match2 match 123 

$ awk -f script.awk file 
match1 string1 string2 string3longlonglonglonglonglong 
match2 string1 string2 string3longlonglonglonglonglong 

你永远需要结合grepawk

+1

谢谢!这就是我需要的 - 一个明确的解释。 – twinpeaksbob 2013-02-12 11:54:10

+0

为什么我得到4个相同的输出? 即使使用简单脚本'{var =“string”print var}'我也会得到'string \ n string \ n string \ n'。为什么发生这种情况? – twinpeaksbob 2013-02-12 13:12:26

+0

由于输入文件中有4行,并且每行都应用了块{{var =“string”print var}“}。 – 2013-02-12 13:15:14