Bash 是否筛选以制表符分隔的文件的多列?

Bash 是否筛选以制表符分隔的文件的多列?,bash,shell,Bash,Shell,一个非常简单的问题,我如何过滤出一个由多个列组成的制表符分隔的文件 该文件如下所示: chr10 100008748 100010821 . . - 1 1 1 1 1 3 0 0 3 5 13 2 3 11 1 4 chr10 100010933 100011322 . . - 1 1 1 1 1 0 2 0 5 3 11 0 0 6 1

一个非常简单的问题,我如何过滤出一个由多个列组成的制表符分隔的文件

该文件如下所示:

chr10   100008748   100010821   .   .   -   1   1   1   1   1   3   0   0   3   5   13  2   3   11  1   4
chr10   100010933   100011322   .   .   -   1   1   1   1   1   0   2   0   5   3   11  0   0   6   1   4
chr10   100010954   100011322   .   .   -   0   1   0   1   0   0   0   0   0   1   0   0   0   0   0   0
chr10   100011459   100012109   .   .   -   1   1   1   1   1   1   0   4   8   2   17  4   3   11  2   2
chr10   100011959   100015344   .   .   +   1   1   1   1   0   0   0   0   0   0   0   0   0   0   0   0
我需要应用的过滤器是10。准确地说,我需要在所有列中看到10或更多。我尝试了以下脚本,但不起作用:

cat infile.txt \
> while read line \
> do \
> ext=`echo $line | cut -f11-` \
> if [ "$ext" >= "10" \] \
> then \
> echo $line \
> fi \
> done > outfile.txt
我该怎么做呢

错误消息:

cat: while: No such file or directory
cat: read: No such file or directory
cat: line: No such file or directory
cat: do: No such file or directory
cat: ext=: No such file or directory
cat: if: No such file or directory
cat: [: No such file or directory
cat: : No such file or directory
cat: 10: No such file or directory
cat: ]: No such file or directory
cat: then: No such file or directory
cat: echo: No such file or directory
cat: fi: No such file or directory
cat: done: No such file or directory
您可以使用awk:

awk -F'\t' '{for (i=11; i<=22; i++) if ($i>10) {print; break}}' file
chr10   100008748   100010821   .   .   -   1   1   1   1   1   3   0   0   3   5   13  2   3   11  1   4
chr10   100010933   100011322   .   .   -   1   1   1   1   1   0   2   0   5   3   11  0   0   6   1   4
chr10   100011459   100012109   .   .   -   1   1   1   1   1   1   0   4   8   2   17  4   3   11  2   2
awk-F'\t'{for(i=11;i10){print;break}}文件
chr10 100008748 100010821..-1   1   1   1   1   3   0   0   3   5   13  2   3   11  1   4
chr10 100010933 100011322..-1   1   1   1   1   0   2   0   5   3   11  0   0   6   1   4
chr10 100011459 100012109..-1   1   1   1   1   1   0   4   8   2   17  4   3   11  2   2
您可以尝试以下方法:

 awk 'BEGIN {FS="\t"} {for (i=11;i<=NF;i++) {printf $i"\t" }}{printf "\n"}' file.txt
样本输出将为:

 1       3       0       0       3       5       13      2       3       11      1       4
 1       0       2       0       5       3       11      0       0       6       1       4
 0       0       0       0       0       1       0       0       0       0       0       0
 1       1       0       4       8       2       17      4       3       11      2       2
 0       0       0       0       0       0       0       0       0       0       0       0

您能给出一个示例输出吗?我在所有列中添加了错误消息10或更大,或在任何列中添加了错误消息10或更大?在第11列到第22列中添加了错误消息10或更大预期输出。。。?
 1       3       0       0       3       5       13      2       3       11      1       4
 1       0       2       0       5       3       11      0       0       6       1       4
 0       0       0       0       0       1       0       0       0       0       0       0
 1       1       0       4       8       2       17      4       3       11      2       2
 0       0       0       0       0       0       0       0       0       0       0       0