GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Dividere un file in base a un insieme predefinito di righe?

Voglio dividere un file di testo in base a un insieme predefinito di righe.
Ad esempio. Ho un file

a
b
c
d
e
f

E poi ho le seguenti serie di righe (queste potrebbero essere memorizzate tuttavia è più conveniente, su un file, più file,...).

1,2
3,6
5,4

Voglio dividere il mio file in modo da ottenere 3 file come:

file1

a
b

file2

c
f

file3

e
d

Risposta accettata:

Ecco una bash script presupponendo che il tuo file di input sia chiamato infile e che gli intervalli siano archiviati 1 per riga in un file chiamato splits:

i=1
for range in $(< splits); do
  sed -n "$(echo "$range" | cut -f1 -d, )p" infile > "file$i"
  sed -n "$(echo "$range" | cut -f2 -d, )p" infile >> "file$i"
  ((i++))
done

Questo usa semplicemente sed per stampare le righe specificate dagli intervalli e salva ogni risultato come un nuovo file (i file creati sono denominati file1 file2 file3 ecc.). Due invocazioni di sed vengono utilizzati per preservare l'ordine specificato delle righe.

Nota che non esiste un controllo del formato o degli errori eseguito da questo semplice script e i file esistenti denominati ad es. file1 verrà sovrascritto.

Un'alternativa semplificata (per gentile concessione di @muru) usando while read e lasciare che bash suddivida gli intervalli invece di tagliare:

i=1
while IFS=',' read n1 n2 
do
    sed -n "$n1 p; $n2 p" infile > "file$i"
    ((i++))
done < splits

Se l'ordine delle righe nei file di output è importante (es. righe 5,4 !=4,5), allora sed bit dovrà essere suddiviso in due invocazioni separate simili al primo script.


Ubuntu
  1. Utilizzo di Sed per aggiornare il file Grub?

  2. Dove impostare il monitoraggio dell'account nella stampa di tazze?

  3. csplit:un modo migliore per dividere il file in Linux in base al suo contenuto

  4. Esempi di comandi sed in Linux

  5. sed:comando non trovato

Come abilitare e configurare il file .htaccess su Apache

Sostituzione di String in Bash

Come configurare la condivisione NFS su Ubuntu 20.04, 18.04

Come dividere un singolo file in più file in base alle righe

Ubuntu:dividere l'audio in più parti in base ai timestamp da un file di testo con Sox o Ffmpeg?

Come dividere un file Mp3?