我正在尝试运行一个使用 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" }'
这会将值“导入”到脚本$domain
中awk
作为变量的值d
。
如果脚本做了正确的事情,我不知道,但您可能想使用${number}
而不是$number
在之后的重定向中。number_domain
您的脚本中没有调用变量,即... >"${number}_$domain.txt"
.