Ich habe eine durch Pipes getrennte Datei und muss die erste Spalte durchsuchen. Wenn ein Muster übereinstimmt, drucke ich die ganze Zeile aus. Der folgende Befehl funktioniert, aber wenn ich ihn in ein Skript einfüge, besteht meiner Meinung nach ein $1Konflikt mit dem Befehl:
Befehl:
awk -F'|' < filename '{if ($1 == "stringtomatch") print $0}'
Skript:
./scripts.sh stringtomatch
Befehl im Skript:
awk -F'|' < filename '{if ($1 == "$1") print $0}'
$1In Anführungszeichen eingeschlossen ist das an das Skript übergebene Argument. Gibt es einen Tipp, wie man das zum Laufen bringt ?
Antwort1
Beachten Sie, dass Sie Ihre stark vereinfachen können awk. Die Standardaktion, wenn ein Ausdruck ausgewertet wird, trueist das Drucken der aktuellen Zeile. Dies bewirkt also dasselbe:
awk -F'|' < filename '$1 == "string"'
Sie können die -vOption zum Übergeben einer Variable verwenden. Ihr Skript kann also wie folgt aussehen:
#/bin/sh
if [ $# -lt 1 ]; then
echo "At least one argument is required"
exit
fi
## Allow the script to get the filename from the 2nd argument,
## default to 'filename' if no second argument is given
file=${2:-filename}
awk -F'|' -v str="$1" '$1 == str' "$file"


