2014-09-12 7 views
0

Очень простой вопрос: Как отфильтровать файл с разделителями табуляции с несколькими столбцами?Фильтровать несколько столбцов файла с разделителями табуляции?

файл выглядит следующим образом:

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

Можете ли вы дать образец вывода? – Ram

+0

Я добавил сообщение об ошибке –

+0

10 или выше во всех столбцах или 10 или больше в любом столбце? –

ответ

1

Вы можете попробовать это:

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

Здесь

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. 

выборка выбор будет:

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

Вы можете использовать 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 
Смежные вопросы