GNU/Linux >> Linux Esercitazione >  >> Linux

come unire due file in modo coerente riga per riga

Questo one-liner Perl visualizzerà le rinominazioni necessarie:

perl -e 'open $f[$_-1], "file$_.txt" for 1,2; print "rename @n\n" while chomp(@n = map ''.<$_>, @f)'

Se questo funziona per te, sostituisci print istruzione con un vero e proprio rename and use

perl -e 'open $f[$_-1], "file$_.txt" for 1,2; rename @n while chomp(@n = map ''.<$_>, @f)'

per eseguire l'effettiva ridenominazione.


Puoi usare paste per formattare i file affiancati:

$ paste -d" " file1.txt file2.txt
/etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
/etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
/etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
/etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
/etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0

Ad esempio:

$ paste -d" " file1.txt file2.txt | while read from to; do echo mv "${from}" "${to}"; done
mv /etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
mv /etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
mv /etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
mv /etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
mv /etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0

Ovviamente vorrai inserire alcuni controlli di sicurezza ([ -f "${from}" ] , ...).

Dichiarazione di non responsabilità:funziona solo se non ci sono spazi nei nomi dei file.


paste -d " " file1.txt file2.txt

funziona alla grande per questo lavoro.

Ma nel caso in cui gestisci file di testo in un ambiente Windows e utilizzi la pasta GNU, assicurati di trasformare i file in formato Unix (CR) e non utilizzare file con (CR-LF).

La pasta GNU non sembra gestire correttamente i formati DOS e l'analisi è imprevedibile. L'output previsto è irregolare e inaspettato senza avvisi.

Puoi usare gVim per trasformarli facilmente (menu ModificaImpostazioni fileFormato file ).


Linux
  1. Come unire due file di testo in Linux

  2. Stampa due file in due colonne?

  3. Come confrontare il contenuto di due tarball

  4. Unisci manualmente due file usando diff

  5. Unisci due file HTML nel file HTML principale

Come leggere i file riga per riga in Bash

Come confrontare e unire file di testo su Linux

Come confrontare e unire file di testo su Linux (parte 2)

Come eseguire la ricerca del modello nei file utilizzando Grep

Come visualizzare due file affiancati in Linux

Come confrontare due file nel terminale Linux