在 awk 指令上傳遞腳本參數

在 awk 指令上傳遞腳本參數

我有一個管道分隔的文件,我需要 grep 第一列,如果模式匹配,我將列印整行。下面的命令有效,但是當我將其放在腳本中時,我認為該$1命令與命令衝突:

命令:

awk -F'|' < filename '{if ($1 == "stringtomatch") print $0}'

腳本:

./scripts.sh stringtomatch

腳本中的命令:

awk -F'|' < filename '{if ($1 == "$1") print $0}'

雙引號中包含$1的是傳遞給腳本的參數。有什麼建議如何使這項工作有效嗎?

答案1

請注意,您可以大大簡化您的awk.如果表達式計算結果為,則預設操作true是列印目前行。所以這做了同樣的事情:

awk -F'|' < filename '$1 == "string"'

無論如何,您可以使用該-v選項來傳遞變數。所以你的腳本可以是:

#/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"

相關內容