I have two files (file1.txt & file2.txt ) , files are only examples .
How to merge the two files , in order to create the file - merge_files.txt as example 3
I writing now ksh script , so merge can be done with ksh,awk,sed,perl one liner ...etc
Background - why I need to merge the files : my target is to rename the OLD file (exist in first field) to 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
Works great for this job. But in case you are handling text files in a Windows environment and make use of GNU paste, make sure to transform the files to Unix format (CR) and not use files with (CR-LF).
GNU paste does not seem to handle DOS formats properly and parsing is unpredictable, the expected output is erratic and unexpected without warnings.
You may use GVIM to transform them easily (Edit/File Settings/File Format)
Completely unrelated ways to achieve the OP's goal of renaming numbered files:
Another possibility based on
rename
This Perl one-liner will display the renames necessary
If this works for you then replace the
print
statement with a real rename and useto do the actual renaming
You can use
paste
to format the files side by side:E.g.:
Of course you would want to throw in some safety checks (
[ -f "${from}" ]
, ...).Disclaimer: Works only if there are no spaces in your filenames.
command
output