-1

次の例のように、最初の行に番号が含まれ、2 番目の行にそれに関連付けられたステートメントが含まれるファイルがあります。

     12
     stat1
     18
     stat2
     15
     stat3

しかし、数字ごとに逆にソートするような出力を印刷する必要があるため、それに関連するステートメントを次のように印刷します

     Time = 18
     Stat = stat2
     Time = 15
     Stat = stat3
     Time = 12
     Stat = stat1
4

2 に答える 2

0
perl -lne 'if(/^\s+\d+/){$k=$_}else{$x{$k}=$_}END{for(sort {$b<=>$a} keys %x){print "time=$_\nStat=$x{$_}";}}' your_file

以下でテスト:

> cat t6emp
     12
     stat1
     18
     stat2
     15
     stat3
> perl -lne 'if(/^\s+\d+/){$k=$_}else{$x{$k}=$_}END{for(sort {$b<=>$a} keys %x){print "time=$_\nStat=$x{$_}";}}' t6emp
time=     18
Stat=     stat2
time=     15
Stat=     stat3
time=     12
Stat=     stat1
于 2013-04-17T09:23:10.080 に答える
0

これが私のエクソシズムです:

cat <yourfile> | awk '{s[NR]=$0} END {for(i=1;i<NR;i=i+2) print s[i], s[i+1]}' | sort -r | awk '{printf "Time = %s\nStat = %s\n",$1,$2}'

また出力:

    # cat test.dat
    12
    stat1
    18
    stat2
    15
    stat3


   # cat test.dat | awk '{s[NR]=$0} END {for(i=1;i<NR;i=i+2) print s[i], s[i+1]}' | sort -r | awk '{printf "Time = %s\nStat = %s\n",$1,$2}'
    Time = 18
    Stat = stat2
    Time = 15
    Stat = stat3
    Time = 12
    Stat = stat1
于 2013-04-17T09:21:54.247 に答える