如何逐行一致地合并两个文件 [英] how to merge two files consistently line by line
问题描述
我有两个文件 (file1.txt & file2.txt ),文件只是示例.
I have two files (file1.txt & file2.txt ) , files are only examples .
如何合并两个文件,以创建文件 - merge_files.txt 示例 3
How to merge the two files , in order to create the file - merge_files.txt as example 3
我现在在写 ksh 脚本,所以合并可以用 ksh、awk、sed、perl 一个 liner ...等来完成
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) ,
示例 1
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
.
.
.
.
示例 2
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
.
.
.
.
示例 3
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 结构)
example4 (merge_files.txt structure)
first field second field
OLD file NEW file
推荐答案
您可以使用 paste
并排格式化文件:
You can use paste
to format the files side by 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
例如:
$ 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
当然你会想要进行一些安全检查([ -f "${from}" ]
, ...).
Of course you would want to throw in some safety checks ([ -f "${from}" ]
, ...).
免责声明:仅当文件名中没有空格时才有效.
Disclaimer: Works only if there are no spaces in your filenames.
这篇关于如何逐行一致地合并两个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!