我正在使用以下命令对文件进行操作:
awk '{delta = $1 - avg; avg += delta / NR; mean2 += delta * ($1 - avg); } END { print avg" "sqrt(642)*sqrt(mean2 / NR); }' param_A_ratio_re_truncated.txt
Run Code Online (Sandbox Code Playgroud)
现在,我想立即重复此命令行,但将文件名中的“A”替换为“D、G、K、M”等,而不是每次都键入该行。虽然我可以替换文件名中的数值,但我不确定如何更改字符。任何建议,将不胜感激。谢谢。
你可以试试:
awk '.....' param_[ADGKM]_ratio_re_truncated.txt
Run Code Online (Sandbox Code Playgroud)
...但这将生成单个 avg/sqrt/mean 输出(即awk脚本将所有文件作为一大组数据处理)。
如果目的是为每个文件生成单独的 avg/sqrt/mean,则有一个简单/快速的解决方案:
for fname in param_[ADGKM]_ratio_re_truncated.txt
do
echo "######### input: ${fname}"
awk '.....' "${fname}"
done
Run Code Online (Sandbox Code Playgroud)
您可以使用单个awk脚本来处理所有文件并为每个文件生成单独的 avg/sqrt/mean,但它需要更多代码,例如:
awk '
function print_output() {
if (rowcnt > 0)
print FILENAME, avg, sqrt(642)*sqrt(mean2 / rowcnt)
delta = avg = mean2 = "" # reset variables for next file
rowcnt = 0
}
FNR==1 { print_output() } # FNR==1 => new file so print results for previous file
{ rowcnt++
delta = $1 - avg
avg += delta / rowcnt
mean2 += delta * ($1 - avg)
}
END { print_output() } # print results for last file
' param_[ADGKM]_ratio_re_truncated.txt
Run Code Online (Sandbox Code Playgroud)
笔记:
'FILENAME,'如果您不想显示每个文件的名称,请删除