Bash 我的awk脚本未使用所有输入行

Bash 我的awk脚本未使用所有输入行,bash,shell,unix,awk,Bash,Shell,Unix,Awk,仅供参考:$NEWFILE是NEWFILE.vcf awk 'BEGIN {FS="[\t]+"}; NR <= 2 || $6 >= 100 {print $0 > "newfile.vcf"}' $NEWFILE 所需输出: NAME1 NAME2 NAME3 #CHROM POS ID ALT REF QUAL FILTER

仅供参考:$NEWFILE是NEWFILE.vcf

awk 'BEGIN {FS="[\t]+"}; NR <= 2 || $6 >= 100 {print $0 > "newfile.vcf"}'
$NEWFILE
所需输出:

                                                     NAME1    NAME2    NAME3
#CHROM   POS    ID    ALT    REF   QUAL   FILTER    953_102   953_103    953_104
Chr1    1058     .     TAA    TAAA    999   StandBias
Chr1    1071     .     TAA    TAAA    118   StandBias
Chr1    1089     .     TAA    TAAA    999   StandBias
电流输出:

                                                     NAME1    NAME2    NAME3
#CHROM   POS    ID    ALT    REF   QUAL   FILTER    953_102   953_103    953_104
Chr1    1058     .     TAA    TAAA    999   StandBias
程序(虽然在awk之前的内容与问题无关。在awk之前的一切都按预期工作。)

#/bin/bash
#删除数据文件顶部的额外内容。
NEWFILE=NEWFILE.vcf
LINESINLEGEND=`wc legend.txt | awk{'print$1'}`
LINESINLEGEND=$((LINESINLEGEND-1))
NEWLEGEND=`tail-n$LINESINLEGEND$2`
如果[$#-eq 0]
然后
echo“用法:filename.vcf legend.txt”
fi
如果[$#-eq 2]
然后
printf“$NEWLEGEND”>temp
CUTME=`cut-F5温度| cut-d”“-F4温度| tr-s'\n'\t'`
室温
printf”“>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“\t”>>$NEWFILE
printf“$CUTME\n”>>$NEWFILE
grep-v“^\\\\\\\\”$1>>$NEWFILE
awk'NR==1 | |$6>=100'newfile.vcf>newfile.vcf
#建议的代码不会在newfile.vcf中显示任何内容
fi

此命令应执行以下操作:

awk 'NR==1 || $6 >= 100' input.file > newfile.vcf
NR==1
匹配输入的第一行
$6>=100
匹配
QUAL
大于或等于
100
的行。awk中的默认操作是将整个输入打印到输出。这就是为什么可以省略
{print$0}


您不需要指定
选项卡
作为分隔符,因为它是默认分隔符之一。

我认为这应该可以做到:

 awk -F"\t" '{if ( $6 > 100 || NR<=2) print $0}' input.vcf > newfile.vcf

awk-F“\t”{if($6>100 | | | NR我想知道这个命令是如何工作的!请从您的输入和预期的输出中发布一些示例行。使用awk'NR==1 | | |$6>=100'newfile.vcf>newfile.vcf添加的输入和输出现在什么也不打印。您好,谢谢您的建议,但是我的程序在使用该命令后挂起。您的代码工作了,我刚刚创建了一个临时文件使用它作为输入。谢谢。对不起,我手工重写了命令,在我的机器上是$6。我尝试了你的代码,我的newfile.vcf是空的。但也许你说的不是所有的行都是制表符分隔的,很难说有这么多数据。在命令行上尝试
awk-F“\t”'$6!=“| nR你不需要通过
-F”\t”
。它是由default@anton5999您正在告诉
您的程序挂起了
。请显示您的程序。嗨,JNevill,这两个命令是不同的。第一个命令的结果是85,第二个命令的结果是147。另外hek2gml我现在就发布程序,只需要解释一下它的作用。
awk 'NR==1 || $6 >= 100' input.file > newfile.vcf
 awk -F"\t" '{if ( $6 > 100 || NR<=2) print $0}' input.vcf > newfile.vcf