2017-11-11 4 views
-1

grepコマンドを使用して、リストに基づいてファイルをフィルタリングしました。Grepコマンドエラー

grep -w -F -f list.txt file1.tsv > file2.tsv

しかし、それは同様に私にいくつかの余分な行を与えています。私のリストには2130の値がありますが、file2には2213のユニークな行があります。ここにfile1の最初の数行があります。

Variant   Gene    
    rs1042714  ADRB2     
    rs2297480  FDPS   
    rs12248560  CYP2C19  

ここにList.txtのいくつかの行があります。

rs228729 
rs228642 
rs228666 
rs2640909 

リストファイルに基づいてファイルをフィルタするにはどうすればよいですか?

+2

コマンドが正しいです。結果は、* list *からのいくつかの値が* file1 * – hek2mgl

+0

に複数回現れることを意味します。list.txtとfile1.tsvをどこかにアップロードし、あなたの質問にリンクを追加します。 – Cyrus

+0

重複した値を削除したので、file1のリストから複数回現れる値はありません。 – Sarah

答えて

0

コマンドは、コマンドを確認するには、正しいです:

grep -w -F -f list.txt file1.tsv > file2.tsv 

は試合を反転する-vと同じコマンドを実行します。file2.tsv.invert

grep -v -w -F -f list.txt file1.tsv > file2.tsv.invert 

チェック内容をファイルを使用してテストしてください(すべての結果は正常です):

grep -w -F -f list.txt file2.tsv.invert | wc -l 
> 0 # it's ok 

wc -l file2.tsv.invert file2.tsv # total must be equal to file1.tsv 
> 2544 file2.tsv.invert 
> 2997 file2.tsv 
> 5541 total 

wc -l file1.tsv 
> 5541 file1.tsv 

すべてがOKです!

+0

file2.tsvとfile2.tsvの合計行がfile1.tsvの合計を超えています。重複を取り除いた後、私は合計しました。両方のファイルをExcelでチェックすると、file2.tsvとfile2.tsv.invertの両方に存在するいくつかの値があります – Sarah

+0

DOSファイルがありますか?必要に応じてdos2unixを変換してください。 – Indent

+0

ファイルをどこかにアップロードしようとします – Indent