2017-06-22 14 views
0

私はawkコマンドをbashスクリプトを使ってループしようとしていますが、awkコマンドの一重引用符内に変数を含めるのは苦労しています。私はawkでこれを完全にやっているはずだと思っていますが、今はbashにもっと気楽になります。Bashでawkコマンドを使用する

#!/bin/bash 

index="1" 

while [ $index -le 13 ] 
do 

    awk "'"/^$index/ {print}"'" text.txt 

done 
+2

なぜ 'grep"^$ index "'だけではないのですか?この目的のためにawkを使うのが最上位です... – John3136

答えて

0
awk '/'"$index"'/' text.txt 
# A lil play with the script part where you split the awk command 
# and sandwich the bash variable in between using double quotes 
# Note awk prints by default, so idiomatic awk omits the '{print}' too. 

は、代わりにgrep

grep "$index" text.txt # Mind the double quotes 

よう

を使用する注意ください必要があります:あなたindex=1index="1"を変更することができよう-leは、数字を比較するために使用されます。

+0

''/'"$ index"'/''これは悪い習慣です。代わりに' -v varname = "somevalue" 'を使ってください –

1

は、標準的なアプローチを使用し - awk-vオプション変数を渡す/設定するには:ここで

awk -v idx="$index" '$0 ~ "^"idx' text.txt 

を私はシェル変数$indexの値を持つものとして、変数idxを設定しています。 awkの中では、を変数awkとして使用しました。

$0 ~ "^"idxは、変数idxに含まれるレコードが(^)で始まる場合に一致します。その場合は、レコードを印刷します。

関連する問題