我有一个管道分隔的文件,我需要 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"