2017-10-30 4 views
1

Ich möchte runde Zahlen nach einem Wort (alter #) übereinstimmen.AWK - Runden von Zahlen nach einem passenden Wort

input.txt:

g11_21   g11_22   g11_23   g11_24   
g11_25   g11_26   g11_27   g11_28   
g11_29   g11_30   g11_31   g11_32   
temper   alter#   
    9.145e-06  8.486e-06   0.5500   0.5500  
    0.5500   0.5500   0.5500   0.5500  

output.txt:

0  0   1   1  
    1  1   1   1 

ich mit dem folgenden awk Code versucht. Es kann Zahlen runden, aber ich denke, ich habe sie nicht korrekt ausgedruckt. Jede Hilfe wird geschätzt.

awk '/alter#/,EOF {printf("%.0f\n",$0)}' input.txt > output.txt 

Antwort

2

mit gawk

awk 'BEGIN {CONVFMT="%.0f"} 
    f  {for(i=1;i<=NF;i++) $i=$i+0; print}; 
    /alter#/{f=1}' 
2

Folgende awk kann Ihnen helfen, in der gleichen.

awk '{ 
for(i=1;i<=NF;i++){ 
    if(!flag){ 
    if($i == "alter#"){ 
     flag=1} 
}; 
    if(flag && $i && $i != "alter#"){ 
    val=1; 
    printf ("%0.0f ", $i)} 
}; 
    if(val){ 
    print "" 
}; 
    val="" 
}' Input_file 

Die Ausgabe wird wie folgt sein.

0 0 1 1 
1 1 1 1 
+0

danke !. Gibt es da überhaupt keine Schleife? –

+0

@JaeyoungPark, gemäß Ihrem Beispieldatum, da Sie alle Daten des Feldes abdecken möchten, so dass nur eine Schleife benötigt wird, wenn Ihre tatsächlichen Daten von Probe eins abweichen, dann lassen Sie mich dies bitte wissen. – RavinderSingh13

+0

Ich verstehe. Vielen Dank. –