awk
  • pattern-matching
  • 2014-03-28 230 views 0 likes 
    0

    這是我的代碼:匹配一個變量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" 
    

    然而,究竟maches'頭」,而不是變量的內容。例如,如果我設置header ='hola',我希望腳本匹配hola而不是頭部。

    你有什麼想法嗎?

    在此先感謝。

    回答

    0

    試試這個:

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

    作品,謝謝! – user2886545

    +0

    這不會工作,你知道爲什麼嗎? ';'' –

    1

    您可以使用雙引號來使用shell變量

    例1#:

    [email protected]:~$ u=root 
    [email protected]:~$ awk "/$u/" /etc/passwd 
    root:x:0:0:root:/root:/bin/bash 
    

    例2#

    [email protected]:~$ r=rahul 
    [email protected]:~$ awk '/'"$r"'/' /etc/passwd 
    rahul:x:1000:1000:rahul,,,:/home/rahul:/bin/bash 
    
    0

    這很奇怪。如果您將header更改爲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"}' 
    
    +1

    '/../'裏的變量被認爲是文字。改用'$ 0〜header'。當你使用'/ h /'時,它匹配'** h ** ola'中的'h'。 –

    +0

    @jaypal哦,我明白了!非常感謝。 –

    +1

    'h'與行'hola'中的文字'h'匹配。 –

    相關問題