【发布时间】:2016-10-03 02:31:48
【问题描述】:
我有以下文件。我想根据文件的第一个字段合并文件。
File1
a~1~2~3~4
b~4~6~7~8
c~8~9~10~11
File1 是源文件,我收到了 file2 和 file3
File2
a~5~6~3~4
b~4~6~7~8
d~9~11~12~13
File3
a~51~61~31~41
b~41~62~72~82
e~11~12~13~14
所以 File1 记录由我们收到的最新文件更新。这里 File3 是最新的文件。因此,对于具有第一个字段的记录,a 将使用 File3 中存在的值进行更新。以 c 开头的记录在 File2 和 File3 中没有更新,因此将保持不变。 File3 中的记录 e 是新的,因此添加到 File1。所以 File1 的最终内容
a~51~61~31~41
c~8~9~10~11
b~41~62~72~82
d~9~11~12~13
e~11~12~13~14
首先我试图从所有文件中获取公共记录,但下面的命令仅从 2 个文件中提取公共记录。
awk -F"~" 'NR==FNR {a[$1]=$1; next}$1 in a {print $0}' file1 file2
我正在做更多的工作。
【问题讨论】:
-
添加您尝试提问的内容
-
使用哪个标准更新?
-
“长”和“短”是主观的。建议您展示您的“长”脚本或至少对其长度进行定量描述,然后也许有人可以告诉您是否可以使用更短的脚本和/或更简单的脚本来完成。
-
编辑了问题。请检查并让我知道是否需要更多信息。
-
试试 "cat file3 file2 file1 |sort -u -t~ -k1,1"