2012-04-02 25 views
0

Ich habe eine Datei mit einzelnen Feld so;passende Datensätze in 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 

Ich mag eine neue Datei drucken, die dieses Feld und ein zweites Feld mit Werten enthält, die durch einen Wert erhöht (etwa 100.000) jedes Mal, wenn ein Datensatz nicht den bisherigen Rekord im Feld entspricht. So würde die Ausgabe so aussehen:

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 

Wäre dankbar, wenn jemand vorschlagen kann, wie man das macht.

+0

Linien sind durch Leerzeilen getrennt? – kev

+0

Nein, zwischen den Zeilen sollten keine Leerzeichen stehen. – user1308144

Antwort

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

Vielen Dank. Es hat Spaß gemacht. – user1308144

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

Sie könnten setzen auch flag = -100000 zunächst und die NR>1 aus Bedingung für den zweiten Fall zu beseitigen.

2
awk -F\| -v value=-100000 ' 
    $1 != prev {value += 100000; prev = $1} 
    {print $0, value} 
'