language-agnostic - 如何逐行合并两个文件

标签 language-agnostic

我有两个文件(file1.txt & file2.txt)。这些文件只是示例。

如何合并这两个文件以创建文件 - merge_files.txt 如示例 3?

我现在正在写 KornShell (ksh) 脚本,因此可以使用 KornShell 进行合并,AWK , sed , 一个 Perl单线等。

背景 - 为什么我需要合并文件:我的目标是将 old 文件(存在于第一个字段中)重命名为 new 文件(存在于第二个字段中)字段)。

示例 1

文件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

文件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

文件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
.
.
.
.
.

示例 4(merge_files.txt 结构)

first field                           second field

OLD file                              NEW file

最佳答案

您可以使用 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}"], ...)。

免责声明:仅当您的文件名中没有空格时才有效。

关于language-agnostic - 如何逐行合并两个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16394176/

相关文章:

date - 如何发现某一天是否是工作日

最近/经常联系自动完成的算法?

algorithm - 随机世界生成街道

language-agnostic - 何时升级到新版本的语言或框架?

language-agnostic - 如何在社交交易环境中使用 DHT

java - 当你说 "This language runs on JVM"时,它到底是什么意思?

concurrency - 什么是缓存命中和缓存未命中?为什么上下文切换会导致缓存未命中?

language-agnostic - 计算小(有时大)x ln(1-x) 的好算法

language-agnostic - QLearning中的Alpha和Gamma参数

design-patterns - 异步观察者模式