2017-06-22 6 views
0

Ich versuche, einen Awk-Befehl mit Bash-Skript zu loopen und ich habe eine harte Zeit, eine Variable innerhalb der Anführungszeichen für die Awk-Befehl enthalten. Ich denke ich sollte das komplett in awk machen, aber ich fühle mich jetzt besser mit bash.Verwenden von Awk-Befehl in Bash

#!/bin/bash 

index="1" 

while [ $index -le 13 ] 
do 

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

done 
+2

Warum nicht einfach 'grep '^ $ index" '? Sieht so aus, als ob awk zu diesem Zweck übertrieben ist ... – John3136

Antwort

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. 

tun sollte, alternativ verwenden grep wie

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

Hinweis:-le zum Vergleichen Zeichen verwendet wird, so dass Sie kann Änderung index="1" zu index=1.

+0

''/'" $ index "'/'' das ist eine schlechte Übung, benutze '-v varname =" somevalue "' stattdessen –

1

den Standardansatz verwenden - -v Möglichkeit awk setzen/übergeben Sie die Variable:

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

Hier i gesetzt haben die Variable idx als den Wert der Shell-Variable $index mit. Inside awk, ich habe einfach idx als awk Variable verwendet.

$0 ~ "^"idx passt, wenn der Datensatz mit (^) beginnt, unabhängig von der Variablen idx enthält; Wenn ja, drucken Sie den Datensatz.

Verwandte Themen