Bash 为什么awk会卡住并生成无限文件?

Bash 为什么awk会卡住并生成无限文件?,bash,awk,Bash,Awk,我有一个很长的bash脚本,其中我使用术语“patient_number=$1”指示一个样本/患者,这样我就可以按如下方式运行脚本: sh myscript.sh 551 sh myscript.sh 1034 (即针对不同的患者) 在我进入最后一步之前,这个脚本工作得完美无缺,只需使用awk对一些内容进行排序: awk '{ OFS = "\t" ; if ($5 + 6 >= 5) print > "Cflo"$patient_number"_5Xcovered_withcov

我有一个很长的bash脚本,其中我使用术语“patient_number=$1”指示一个样本/患者,这样我就可以按如下方式运行脚本:

sh myscript.sh 551
sh myscript.sh 1034
(即针对不同的患者)

在我进入最后一步之前,这个脚本工作得完美无缺,只需使用awk对一些内容进行排序:

awk '{ OFS = "\t" ; if ($5 + 6 >= 5) print > "Cflo"$patient_number"_5Xcovered_withcoverage.txt" }' /path/to/my/original/filefor"$patientnumber".txt
命令本身在我手动运行它时起作用。但在这里,它开始创建无限数量的文件,用一系列数字和问号替换“$patient_number”,如下所示:

Cflo9?9945?9945?0?0?9_5Xcovered_withcoverage.txt
Cflo9?9948?9948?0?0?6_5Xcovered_withcoverage.txt
Cflo9?9951?9951?0?0?6_5Xcovered_withcoverage.txt
Cflo9?9952?9952?0?0?7_5Xcovered_withcoverage.txt
Cflo9?9956?9956?0?0?6_5Xcovered_withcoverage.txt
Cflo9?9957?9957?0?0?6_5Xcovered_withcoverage.txt
Cflo9?9961?9961?0?0?5_5Xcovered_withcoverage.txt
Cflo9?9968?9968?0?0?5_5Xcovered_withcoverage.txt
Cflo9?9972?9972?0?0?4_5Xcovered_withcoverage.txt
Cflo9?9976?9976?0?0?5_5Xcovered_withcoverage.txt
Cflo9?9977?9977?0?0?5_5Xcovered_withcoverage.txt
Cflo9?9979?9979?0?0?2_5Xcovered_withcoverage.txt
Cflo9?9980?9980?0?0?2_5Xcovered_withcoverage.txt
Cflo9?9983?9983?0?0?4_5Xcovered_withcoverage.txt
Cflo9?9984?9984?0?0?2_5Xcovered_withcoverage.txt
Cflo9?99?99?0?0?8_5Xcovered_withcoverage.txt
在我停止之前,我让它运行了将近一百万个文件。有人知道这可能是什么原因吗


谢谢

事实上,我发现只要重新安排就可以解决问题。必须是双引号的问题:

由此:

awk '{ OFS = "\t" ; if ($5 + 6 >= 5) print > "Cflo"$patient_number"_5Xcovered_withcoverage.txt" }' /path/to/my/original/filefor"$patientnumber".txt
为此:

awk '{ OFS = "\t" ; if ($5 + 6 >= 5) print $0 }' /path/to/my/original/filefor"$patientnumber".txt > Cflo"$patient_number"_5Xcovered_withcoverage.txt

Awk无权访问shell变量
patient_number
defauts为0,因此您最终引用的是
$0
,即整个输入行。FYI
awk'{OFS=“\t”;如果($5+6>=5)print$0}'
=
awk'$5>=-1'
。不,问题与双引号无关。