スクリプト出力を並べ替えますが、行を一緒に保持します。

スクリプト出力を並べ替えますが、行を一緒に保持します。

いくつかのファイルを読み、出力をソートしたいと思います。

たとえば、

cat example.conf  
Order: 0   
Package: example 

cat another.conf  
Order: 2  
Package: another

cat file.conf  
Order: 1  
Package: file

次のように出力しますawk '/Order|Package/' conf/*.conf

Order: 2  
Package: another  
Order: 0  
Package: example  
Order: 1  
Package: file

Order:出力を次の数字でソートしますが、行間の関係を壊さないようにします。たとえば、次のようになります。

Order: 0  
Package: example  
Order: 1  
Package: file  
Order: 2  
Package: another

ベストアンサー1

awkGNU> 4.0を使用し、そのOrderレコードが常にPackageこのレコードの前にあると仮定すると

gawk '/^Order/ {order = $2} /^Package/ {p[order] = $0} 
  END {
    PROCINFO["sorted_in"] = "@ind_num_asc"
    for (i in p) {print "Order:", i; print p[i]}
  }
' conf/*.conf
Order: 0
Package: example
Order: 1
Package: file
Order: 2
Package: another

高齢者の場合は、以下をgawk使用できますasorti

gawk '/^Order/ {order = $2} /^Package/ {p[order] = $0} 
  END {
    n = asorti(p,b)
    for (i=1;i<=n;i++) {print "Order:", i; print p[b[i]]}
  }
' conf/*.conf

おすすめ記事