将变量与AWK匹配

将变量与AWK匹配,awk,pattern-matching,Awk,Pattern Matching,这是我的代码: awk -v header=$header '{if($0~/header/){if(i>0){printf "\n"$0}else{printf $0}}else{printf "\t"$0};i++}END{printf "\n"}' $1 > $basename1"_tab.tab" 但是,它只处理“header”,而不是变量的内容。例如,如果我设置header='hola',我希望脚本匹配hola而不是header 你知道吗 提前感谢。试试这个: awk -

这是我的代码:

awk -v header=$header '{if($0~/header/){if(i>0){printf "\n"$0}else{printf $0}}else{printf "\t"$0};i++}END{printf "\n"}' $1 > $basename1"_tab.tab"
但是,它只处理“header”,而不是变量的内容。例如,如果我设置header='hola',我希望脚本匹配hola而不是header

你知道吗

提前感谢。

试试这个:

awk -v head="$header" '{if($0~head){if(i>0){printf "\n"$0.....

可以使用双引号来使用shell变量

示例1:

rahul@test-srv:~$ u=root
rahul@test-srv:~$ awk "/$u/" /etc/passwd
root:x:0:0:root:/root:/bin/bash
示例2#


真奇怪。如果您将
标题
更改为
h
它会工作

header=hola; echo hola | awk -v h=$header '/h/{print "Matched"}'
Matched

header=hola; echo hola | awk -v header=$header '/header/{print "Matched"}'
肯特的似乎不起作用-这绝对不是我所期望的

header=hola; echo hola | awk -v header="$header" '/header/{print "Matched"}'

/../
中的变量被视为文字变量。改用
$0~标题
。使用
/h/
时,它与
**h**ola
h
中的
h
匹配
hola
行中的文字
h
header=hola; echo hola | awk -v header="$header" '/header/{print "Matched"}'