Linux 在unix上合并文件和数据。在现有文件中正确合并并更新和插入
我有以下文件。我想根据文件的第一个字段合并文件Linux 在unix上合并文件和数据。在现有文件中正确合并并更新和插入,linux,shell,unix,awk,sed,Linux,Shell,Unix,Awk,Sed,我有以下文件。我想根据文件的第一个字段合并文件 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是最新的文件。因此,对于具有第一个字段的记录,将使用文件3中的值更新
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是最新的文件。因此,对于具有第一个字段的记录,将使用文件3中的值更新字段a。以c开头的记录在文件2和文件3中没有更新,因此将保持不变。文件3中的记录e是新的,因此添加到文件1中。那么文件1的最终内容是什么呢
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
a~51~61~31~41
b~41~62~72~82
c~8~9~10~11
d~9~11~12~13
e~11~12~13~14
说明:
从file3打开到file1,然后使用unique并根据第一列对其进行排序。列分隔符定义为“~”此awk将工作:
awk -F'~' '{line[$1]=$0} END {for (key in line) print line[key]}' File{1,2,3}
每个具有特定键的新记录都将替换之前的记录
输出可能无法排序。管道进入排序
,或者如果使用GNU awk,则将其添加到循环之前的结束块:
PROCINFO["sorted_in"] = "@ind_str_asc"
,添加您试图使用哪种标准更新的问题?“长”和“短”是主观的。建议你展示你的“长”脚本,或者至少对其长度进行定量描述,然后也许有人可以告诉你是否可以用较短的脚本和/或更简单的脚本来完成。编辑问题。如果需要更多信息,请检查并告知我。请尝试“cat文件3文件2文件1 |排序-u-t~-k1,1”