如果输入文件为expty,则awk将重新格式化输出
如果用于执行计算的如果输入文件为expty,则awk将重新格式化输出,awk,Awk,如果用于执行计算的文件中包含数据,则下面的awk工作正常。如果文件为空或0KB,则输出不正确。我试图在bwlow中设置一个条件,该条件将检查file是否为空,如果file不为空,则输出保持不变,但如果file为空,则输出将重新格式化为所需的4个零的输出,制表符分隔。我尝试在下面的#检查是否为空。谢谢:) awk awk ' # print from stored values function prt(){ print p1 ":" (p6start==1 ? p2 : p2+p
文件中包含数据,则下面的awk
工作正常。如果文件
为空或0KB,则输出不正确。我试图在bwlow中设置一个条件,该条件将检查file
是否为空,如果file
不为空,则输出保持不变,但如果file
为空,则输出将重新格式化为所需的4个零的输出,制表符分隔
。我尝试在下面的#检查是否为空。谢谢:)
awk
awk '
# print from stored values
function prt(){
print p1 ":" (p6start==1 ? p2 : p2+p6start) "-" p2+p6, "\t" p5
}
($4!=p4 || $6!=p6+1) {
# new sequence, print the previous sequence
if (NR>1) prt()
p6start=$6
}
{
# store the values that we need later
p1=$1
p2=$2
p4=$4
p5=$5
p6=$6
}
END { prt() }
' file | awk -F"[:-]" '
{ print $1 "\t" $2 "\t" $3 "\t" $4}
' > output # make low coverage
# check if empty
if [ -s aFile ]; then
else
output={ print "0 0 0 0" }
fi
所需输出(如果文件为空)
如果文件
不是空的,它将如下所示,并且输出将与预期一样。但是,如果文件
为空且与下面的不一样,则需要重新格式化输出。非常感谢:)
文件
chr2 50573818 50574097 chr2:50573818-50574097 NRXN1 267 2
编辑
chr2 50574085 50574085 NRXN1
使用上面的文件
作为awk
的输入,输出将为:
输出
chr2 50574085 50574085 NRXN1
假设文件
已相应格式化,则这是预期的结果。如果文件
为空且这些字段不存在,则awk
会产生与预期不同的输出。因此,如果文件
为空,那么可以将输出重新格式化为由制表符分隔的四个零吗 请提供简明的,空文件和非空文件的可测试样本输入和预期输出,因为您当前使用的多个awk脚本和管道以及在awk之外测试文件的方法是错误的,因此,与其在其上添加绷带,不如帮助您以正确的方式进行测试。我在编辑部分添加了一些细节,希望这些细节足够详细。非常感谢:)。不太好。我的意思是,考虑到目前为止您向我们展示的输入和输出,您所需要的只是类似于awk'{print$1,$2,$3,$5}END{if(NR==0)print 0,0,0,0}'文件的东西
,以从您发布的输入中生成您想要的输出(空或其他)但是在你的一行输入文件中没有任何东西可以解释在输出中是什么改变了它,并且考虑到你也发布了多少代码,我不敢相信它真的那么简单,所以你的问题一定有一些东西没有包含在你的示例输入/输出中。我想我的困惑或不理解是awk
I post在各种不同的数据上执行。如果文件
为空,我会遇到一个问题,添加该行可以解决这个问题。但是,如何仅将其应用于空的文件
。这真的可能是一件简单的事情,但我还没有那么先进,虽然我正在变得更好,感谢所有伟大的帮助这里和罗宾斯“有效的Awk编程”。非常感谢:)。我正试图告诉您需要做什么,以便我们可以帮助您。你目前的做法完全是错误的。试图将其添加到上面,以便它可以处理空文件,这并不会使它更正确。为了能够帮助您,我们需要看到简洁、可测试的示例输入和预期输出。对于输入,您发布了一行,但您的脚本似乎需要多行输入。对于预期的输出,您还发布了一行,但没有解释您希望应用于输入以产生该输出的转换(如果真的只有一行输入产生该输出,则尤其神秘)。帮助我们帮助你。