linux - how to merge two files consistently line by line -


i have 2 files (file1.txt & file2.txt ) , files examples .

how merge 2 files , in order create file - merge_files.txt example 3

i writing ksh script , merge can done ksh,awk,sed,perl 1 liner ...etc

background - why need merge files : target rename old file (exist in first field) new file (exist in second field) ,

example1

more file1.txt  /etc/port1-192.9.200.1-255.555.255.0 /etc/port2-192.9.200.1-255.555.255.0 /etc/port3-192.9.200.1-255.555.255.0 /etc/port4-192.9.200.1-255.555.255.0 /etc/port5-192.9.200.1-255.555.255.0 . . . . 

example2

more file2.txt  /etc/port1-192.90.2.1-255.555.0.0 /etc/port2-192.90.2.1-255.555.0.0 /etc/port3-192.90.2.1-255.555.0.0 /etc/port4-192.90.2.1-255.555.0.0 /etc/port5-192.90.2.1-255.555.0.0 . . . . 

example3

 more merge_files.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  .  .  .  .  . 

example4 (merge_files.txt structure)

 first field                           second field   old file                              new file 

you can use paste format files side side:

$ 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 

e.g.:

$ paste -d" " file1.txt file2.txt | while read to; 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 

of course want throw in safety checks ([ -f "${from}" ], ...).

disclaimer: works if there no spaces in filenames.


Comments