2017-07-20 11 views
3

内の特定の列に基づいて、大きなファイルを、私は> 100メートルラインでファイルを持っているし、いくつかの基準によってそれをフィルタリングしたい:私は出力に何を望むかフィルターbashの

$ wc -l s1bam.bed 
104797540 s1bam.bed 

$ head -n 3 s1bam.bed 
chr1 14688 14979 NB501800:50:H3NW5BGX3:2:22310:19560:5036/1 3 + 
chr1 14688 14979 NB501800:50:H3NW5BGX3:3:13501:3458:17919/1 3 + 
chr1 14727 15018 NB501800:50:H3NW5BGX3:2:22310:19560:5036/2 3 - 

は5番目のフィールド値>=20で、 !=255(たとえば、右から2番目のフィールド)。 Bashでそれを実現するには?

+0

も説明しますが、基本的に何の努力が主な問題...質問タイトルの正確な検索が 'awk'を使用するヒントをたくさん与えを解決するために示されていません... – Sundeep

答えて

3

あなたは、このためのawkを使用することができます。

awk '$5 >= 20 && $5 != 255' file 
+1

ありがとう@anubhava! –

+0

もう一度ありがとう!私は$ 5フィールドを表にして端末に印刷する簡単な方法があるかどうか疑問に思っています。それで良いカットオフを選ぶことができます。 –

+0

'awk '$ 5> = 20 && $ 5!= 255 {print $ 5}' file 'もしあなたが条件を必要としないなら、' awk' {print $ 5} 'ファイル' – anubhava