0|0,0|1,1|0 および 1|1 を含むファイルの抽出

0|0,0|1,1|0 および 1|1 を含むファイルの抽出

CSVファイルがあります。次のようになります。

chr22,  Position ,  A     ,       B ,      C ,   D , E
22   ,  16050115 ,  0|0:404     ,  0     , 0    ,  0  ,    1|1:5
22    ,16050213    ,0|0:403  ,     0    ,  0   ,    0  ,   3|4:6
22 , 16050607  ,    1|0:340     , 1|1:3,  0   ,    0  ,    1|1:3
22   16050737 ,    0|0:402   ,   3|0:4 , 0|7:23 , 0  ,      0 
22 16050783  ,   0|0:404 ,       2|2:5 , 0|1:31 , 1|0:51,   0

0|0:4040|0はの数を表します4040|01|0値を抽出したいのですが、0|1出力は次1:1 のようになります。

chr22, Position, A ,B, C ,D, E
22 ,16050115, 0|0:404 ,0 ,0 ,0 ,1|1:5
22 ,16050213, 0|0:403, 0 ,0, 0, 0
22 ,16050607, 1|0:340, 1|1:3, 0 ,0 ,1|1:3
22 ,16050737, 0|0:402, 0 ,0 ,0, 0
22 ,16050783, 0|0:404 ,0 ,0|1:31 ,1|0:51, 0

試してみましたが、 grep -e '0|0:' -e '1|1:' -e '0|1:' -e '1|1 /path/file.csvうまくいかないようです。

答え1

元のコマンドライン

次のコマンドラインは、「問題のある」行をスキップし、コンマ区切りのファイルでこれを行うと思います。

grep -v -e ', *[2-9]|' -e '|[2-9]:' file.csv

小さなファイルも色で確認でき、

grep -v -e ', *[2-9]|' -e '|[2-9]:' file.csv |grep --color '.|.'

見つかった行grep(前のコマンドラインのオプションから除外された-v)、

grep -e ', *[2-9]|' -e '|[2-9]:' file.csv |grep --color '.|.'

次のコマンドラインは、タブ区切りのファイルを使用してこれを行います。

grep -v -e '\t[2-9]|' -e '|[2-9]:' Reddy.tab

または、少し緩いチェックが必要な場合は、次のコマンドラインを使用できます。

grep -v -e '[2-9]|' -e '|[2-9]:' Reddy.tab file.csv

OPのコメントに対するコマンドライン応答

以下のコマンドラインは、OPが必要なコンマ区切りファイルとタブ区切りファイルを実行すると思います。

sed -e 's/[2-9]|[0-9]:[0-9]*/NA/' -e 's/[0-9]|[2-9]:[0-9]*/NA/' file.csv

答え2

grepこれが要件であるかどうかはわかりませんが、を使用すると、次のようにしてperl不要な項目を削除できます。

perl -pe 's/, ?[2-9]\d*\|\d+:\d+//g; s/, ?\d+\|[2-9]\d*:\d+//g' /path/to/file.csv

答え3

頑張ります

grep -e '[01]|[01]:' 

0または1を意味する|ので、エスケープする必要があります。0|1

気づく

grep -e '0|0:' -e '1|1:' -e '0|1:' -e '1|1:'

同じように一致します。

列をフィルタリングするには、次の手順を実行します。

awk -F, '$3 ~/[01]|[01]:/ '

3$3番目の列はです。

列3以上をフィルタリングします。

awk -F, '{printf "%s,%s",$1,$2 ; 
      for(i=3;i<=NF;i++) 
        if ( $i  ~ /[01]\|[01]:/) 
           printf ",%s",$i ; 
      printf "\n" }' 

連続している可能性があります。

  • |この場合はエスケープが必要です。
  • また、最初の行はフィルタリングされます。

    chr22,Position
    22,16050115,0|0:404,1|1:5
    22,16050213,0|0:403
    22,16050607,1|0:340,1|1:3,1|1:3
    22,16050737,0|0:402
    22,16050783,0|0:404,0|1:31,1|0:51
    

関連情報