2014-09-12 5 views
0

Une question très simple, comment filtrer un fichier délimité par des tabulations avec plusieurs colonnes?Filtrez plusieurs colonnes d'un fichier délimité par des tabulations?

Le fichier ressemble à ceci:

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 

Le filtre que je dois appliquer est 10. Je dois voir 10 ou plus dans toutes les colonnes pour être précis. J'ai essayé le script suivant mais cela n'a pas fonctionné:

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

Que devrais-je faire à la place?

Le message d'erreur:

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 
+1

pouvez-vous donner un exemple de sortie? – Ram

+0

J'ai ajouté le message d'erreur –

+0

10 ou plus dans toutes les colonnes ou 10 ou plus dans une colonne? –

Répondre

1

Vous pouvez essayer ceci:

awk 'BEGIN {FS="\t"} {for (i=11;i<=NF;i++) {printf $i"\t" }}{printf "\n"}' file.txt 

Ici

1. FS="\t" will set FS as tab. 
2. for loop will start from i=11 
3. printf $i"\t" will print each value corresponding to value of i + a tab in same line(since we used printf). 
4. and in last printf "\n" will take you to the next line for each input line. 

échantillon out put sera:

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 
1

Vous pouvez utiliser 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 
Questions connexes