2012-04-02 29 views
0

私はそういう単一のフィールドを持つファイルを持っています。awkの一致するレコード

scaffold10017|size24957-5236 
scaffold10017|size24957-5236 
scaffold10017|size24957-5236 
scaffold10017|size24957-7124 
scaffold10076|size19532-3212 
scaffold10076|size19532-6287 
scaffold1008|size40169-12384 
scaffold1008|size40169-12399 
scaffold1008|size40169-21350 
scaffold1008|size40169-34740 

私は、このフィールドと値によってインクリメント値を持つ2番目のフィールド(100,000言う)レコードは、フィールドで前のレコードと一致しないすべての時間を含む新しいファイルを印刷したいです。したがって出力は次のようになります。

scaffold10017|size24957-5236 0 
scaffold10017|size24957-5236 0 
scaffold10017|size24957-5236 0 
scaffold10017|size24957-7124 0 
scaffold10076|size19532-3212 100000 
scaffold10076|size19532-6287 100000 
scaffold1008|size40169-12384 200000 
scaffold1008|size40169-12399 200000 
scaffold1008|size40169-21350 200000 
scaffold1008|size40169-34740 200000 

これを行う方法を誰かが示唆してくれれば幸いです。

+0

行は空白で区切られていますか? – kev

+0

いいえ、行間にはスペースを入れないでください。 – user1308144

答えて

1
awk -F '|' 'x!=$1{x=$1; y+=(NR==1?0:100000)}; {print $0, y}' input.txt 
+0

ありがとうございます。それは治療を働いた。 – user1308144

2
awk ' 
    BEGIN { flag = 0 } 
    NR>1 && prev != $1 { 
    prev = $1 
    flag += 100000 
    } 
    { print $1"|"$2, flag }' 

また、当初flag = -100000を設定し、後者の場合の条件からNR>1を排除することができます。

2
awk -F\| -v value=-100000 ' 
    $1 != prev {value += 100000; prev = $1} 
    {print $0, value} 
' 
関連する問題