与 awk 和 shell 变量混淆

与 awk 和 shell 变量混淆

我正在尝试运行一个使用 awk 的脚本。看起来没有错误,但它没有创建我想要的文件。这是脚本:

#!/bin/bash

echo "Number of domain:"
read number
echo "Domain name:"
read domain
more "file.txt" | awk '$2=='$domain' {print $1, "1.0"} $2!='$domain' {print $1,"-1.0"}' >"$number_domain.txt"
echo "DONE"

基本上,我想创建一个文档,保留所有 $1,并更改 $2,如果它是 $domain,则写入 1.0,否则写入 -1.0。

我对如何用“”或“”以及 awk“”和“”编写文本感到困惑。

答案1

该行的最后一项

more "file.txt" | awk '$2=='$domain' {print $1, "1.0"} $2!='$domain' {print $1,"-1.0"}' >"$number_domain.txt"

可能是为了

>"${number}_${domain}.txt"

对应于脚本读取的两个变量。如果您的脚本还确保变量不是空字符串,那就太好了。如果他们空,那么 awk 脚本将会出现错误。

答案2

要使用 shell 变量,请将awk它们提供给awk脚本,-v awkvariable="$shellvariable"而不是尝试将它们粘贴到脚本本身中,即

awk -v d="$domain" '$2 == d { print $1, "1.0" } $2 != d { print $1,"-1.0" }'

这会将值“导入”到脚本$domainawk作为变量的值d

如果脚本做了正确的事情,我不知道,但您可能想使用${number}而不是$number在之后的重定向中。number_domain您的脚本中没有调用变量,即... >"${number}_$domain.txt".

相关内容