GNU/Linux >> Znalost Linux >  >> Linux

Třídit textové soubory s více řádky jako řádek

msort(1) byl navržen tak, aby bylo možné třídit soubory s víceřádkovými záznamy. Má volitelné uživatelské rozhraní a také normální a pro lidi použitelnou verzi příkazového řádku. (Přinejmenším lidé, kteří rádi pozorně čtou manuály a hledají příklady...)

AFAICT, pro záznamy nemůžete použít libovolný vzor, ​​pokud tedy vaše záznamy nemají pevnou velikost (v bajtech, nikoli ve znacích nebo řádcích). msort-b volba pro záznamy, které jsou bloky řádků oddělených prázdnými řádky.

Svůj vstup můžete převést do formátu, který bude fungovat s -b docela snadno tím, že před každou ###... vložíte prázdný řádek (kromě prvního).

Ve výchozím nastavení tiskne statistiky na stderr, takže je alespoň snadné zjistit, kdy netřídil, protože si myslel, že celý vstup je jeden záznam.

msort pracuje na vašich datech. sed příkaz přidá nový řádek před každou #+ řádek kromě řádku 1. -w seřadí celý záznam (lexikograficky). Existují možnosti pro výběr části záznamu, která se má použít jako klíč, ale nepotřeboval jsem je.

Také jsem vynechal odstraňování dalších nových řádků.

$ sed '2,$ s/^#\+/\n&/' unsorted.records | msort -b -w 2>/dev/null 
####################################
KEY1
VAL11
VAL12
VAL13
VAL14

####################################
KEY2
VAL21
VAL22
VAL23
VAL24

####################################
KEY3
VAL31
VAL32
VAL33
VAL34

S -r '#' jsem neměl štěstí použít to jako oddělovač záznamů. Myslel si, že celý soubor je jeden záznam.


Řešením je nejprve změnit odřádkování uvnitř bloku na nepoužitý znak podle vašeho výběru ('|' v příkladu níže), seřadit výsledek a změnit zpět vybraný oddělovač na původní odřádkování:

sed -e 'N; N; N; N; N; s/\n/|/g' file.txt \
| sort -k2,2 -t\| \
| sed 's/|/\n/g'

perl -0ne 'print sort /(#+[^#]*)/g' file.txt
  • perl -0 usrkne celý soubor
  • /(....)/g spárovat a extrahovat záznamy
  • print sort ... seřadit a vytisknout

Linux
  1. Seřadit soubory v konkrétní složce pomocí Ranger?

  2. Duplicitní, s několika malými změnami, několika řádky v textovém souboru?

  3. Nelze dešifrovat textové soubory pomocí Openssl na Ubuntu 18.04?

  1. Awk jednolinky a skripty, které vám pomohou třídit textové soubory

  2. Ventoy:Jak vytvořit multiboot USB disk s více ISO soubory

  3. CloudCross – Synchronizace souborů a adresářů s více cloudovými úložišti

  1. Jak najít velké soubory linux pomocí příkazů find a du

  2. Jak odstranit více náhodných řádků z textového souboru pomocí Sed?

  3. Dd:Více vstupních souborů?