Birden fazla “parça” içindeki satırlar başlıklarla ayrılmış olarak nasıl ayrı ayrı sıralanır?


2

Bu soru bunu tamamlayıcı nitelikte: Satır paketlerini alfabetik olarak sıralayın . Yanıt verdikten sonra, soruyu tamamen yanlış anladığım ve başka bir sorunu çözdüğüm ortaya çıktı. Çözümümün unutulmasını istememekle, sorunu buraya gönderiyorum (ve çözümüm aşağıda).


Gibi bir metin düşünün:

[ProfileB]
param3=z
param2=y
param1=x
[ProfileA]
param1=k
param3=l
param2=

Her [Profile*]bloktaki parametreleri ayrı ayrı sıralamam gerekiyor . Yukarıdaki örnek buna göre sıralanmalıdır:

[ProfileB]
param1=x
param2=y
param3=z
[ProfileA]
param1=k
param2=
param3=l

Standart Unix / Linux araçlarıyla nasıl yapabilirim?

Yanıtlar:


2

Bu Debian'da çalışıyor:

sed '1 ! s/^\[/\x00\[/g' |
split -t '\0' -l 1 --filter='
   tr -d "\0" |
   { IFS="" read; printf "%s\n" "$REPLY"; sort; }
'

Dosya (lar) kullanımı yeniden yönlendirme (ler), örneğin çalışmak için { sed … ; } <input.txt >output.txt, sed …bütün komuttur.

Prosedür aşağıdaki gibidir:

  1. sed[satır ilki olmadıkça, satırın başlangıcındaki her satırdan önce boş karakter ekler . Bu şekilde boş karakterler karakterleri ayırır.
  2. splitboş karakterlerle ayrılmış kayıtları alarak, yığın başına bir kayıt topakları oluşturur. Dosyalara yazmak yerine, splither yığın için ayrı olarak bir filtre çağırır:
    1. ilk başta trboş karakterleri siler;
    2. sonra readve printföbürün ilk satırını (başlığını) tekrarlar;
    3. En sonunda sortkalan çizgilerle işini yapıyor.
  3. Topaklar sırayla işlenir; çıkış, tek bir birleştirilmiş akıştır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.