タブ区切りファイルのデータを使用して特定の行を結合したり引いたりするタブ区切りの結果を出力しようとしています。awkは別の番号を使用して一致するフィールドの座標を調整します
値が1
でない限り、各ラインの$4
一致が最初のマッチングシーケンシャル$6
値は、$2
に追加された場合、元の$2
は(ライン1の場合のように)使用されています。これは新しく調整された$2
の値です。
最後に一致するシーケンシャル$6
の値が$2
に追加され、これは新規または調整済み$3
の値です。
新しい$2
と$3
バレスはフォーマット$1
で$1
と組み合わされる:$2
から$3
と$5
値は、ライン上に印刷されています。
$4
の値が一意である限り、以下のコマンドは有効ですが、必ずしもそうではありません。私は条件 を追加するようには思えません。$6
と番号が連続していない場合(1 2はありますが、92 93 94の間に改行があります)、改行があった場合は改行します。
多分別の方法がありますが、うまくいけば、これが役に立ちます。ありがとう:)
ファイル
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 1 19
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 2 19
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 92 18
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 93 18
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 94 18
chrX 110961329 110961512 chrX:110961329-110961512 ALG13 2 1
chrX 110961329 110961512 chrX:110961329-110961512 ALG13 3 1
chrX 25031028 25031925 chrX:25031028-25031925 ARX 651 3
所望の出力
chrX:110956442-110956444 ALG13
chrX:110956534-110956536 ALG13
chrX:110961331-110961332 ALG13
chrx:25031679-25031679 ARX
awkの
awk 'FNR==NR {S[$4]++;next} ($4 in S){if(S[$4]>1){print $1 OFS $2 OFS $2+S[$4] OFS $5;}
else {if($6==1){print $1 OFS $2 OFS $2 OFS $5}
else {print $1 OFS $2+$6 OFS $2+$6 OFS $5}};delete S[$4]}' file file
電流出力
chrX 110956442 110956449 ALG13
chrX 110961329 110961334 ALG13
chrX 25031028 25031031 ARX
元の調整されていない '$ 2'座標は' 110956442'なので、 '110956534'の新しい調整済み' $ 2'座標を与えるためにこれに '92'が追加されました。 '94 'は、調整されていない' $ 2'座標に対して '110956536'の新しい調整済み' $ 3'座標を与えることです。ブレーク後の最初の桁が '$ 2 'に追加され、ブレーク前の最後の桁が' $ 2'に追加され、調整された座標が得られます。どうもありがとうございました :)。 – Chris
'awk'は完璧に近いですが、' chrX:110956442-110956535'は '$ 6 == 1'の元の '$ 1'値から' chrX:110956442-110956444 ALG13'に調整されるべきです使用されている。どうもありがとうございました :)。 – Chris
現在は 'chrX:110956443-110956444 \t ALG13'です。調整する行は' first_stop =($ 6 == 1)ですか? 0:$ 6; '、それはそうではないようです。ありがとうございました :)。 – Chris