我有两个文件( file1.txt 和 file2.txt ),这些文件仅是示例。
如何合并两个文件,以创建文件 -merge_files.txt 作为示例3
我现在写ksh脚本,所以可以用ksh,awk,sed,perl一个内衬… etc合并
背景-为什么我需要合并文件: 我的目标是将 OLD文件 (存在于第一个字段中)重命名为 NEW文件 (存在于第二个字段中),
例子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结构)
first field second field OLD file NEW file
您可以用来paste并排格式化文件:
paste
$ 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}" ],…)。
[ -f "${from}" ]
免责声明:仅当文件名中没有空格时才有效。