GNU/Linux >> Tutoriels Linux >  >> Linux

comment fusionner deux fichiers de manière cohérente ligne par ligne

Ce one-liner Perl affichera les renommages nécessaires :

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

Si cela fonctionne pour vous, remplacez le print déclaration avec un vrai renommer et utiliser

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

pour faire le changement de nom proprement dit.


Vous pouvez utiliser paste pour formater les fichiers côte à côte :

$ 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

Ex. :

$ 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

Bien sûr, vous voudrez ajouter quelques contrôles de sécurité ([ -f "${from}" ] , ...).

Avis de non-responsabilité :ne fonctionne que s'il n'y a pas d'espaces dans vos noms de fichiers.


paste -d " " file1.txt file2.txt

fonctionne très bien pour ce travail.

Mais si vous manipulez des fichiers texte dans un environnement Windows et utilisez GNU paste, assurez-vous de transformer les fichiers au format Unix (CR) et n'utilisez pas de fichiers avec (CR-LF).

GNU paste ne semble pas gérer correctement les formats DOS et l'analyse est imprévisible. La sortie attendue est erratique et inattendue sans avertissements.

Vous pouvez utiliser gVim pour les transformer facilement (menu ModifierParamètres du fichierFormat de fichier ).


Linux
  1. Comment joindre deux fichiers texte sous Linux

  2. Imprimer deux fichiers sur deux colonnes ?

  3. Comment joindre deux fichiers CSV ?

  4. Comment puis-je différencier deux fichiers XML ?

  5. Comment joindre/fusionner plusieurs fichiers mp3 ?

Comment lire des fichiers ligne par ligne dans Bash

Comment comparer et fusionner des fichiers texte sous Linux

Comment comparer et fusionner des fichiers texte sous Linux (partie 2)

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Comment afficher deux fichiers côte à côte sous Linux

Comment comparer deux fichiers dans un terminal Linux