文件1.log
207.46.13.90 37556
157.55.39.51 34268
40.77.167.109 21824
157.55.39.253 19683
文件2.log
207.46.13.90 62343
157.55.39.51 58451
157.55.39.200 37675
40.77.167.109 21824
文件3.log
207.46.13.90 85343
157.55.39.51 59876
157.55.39.200 37675
157.55.39.253 19683
下面应该是预期的历史记录。
207.46.13.90 37556 62343 85343
157.55.39.51 34268 58451 59876
157.55.39.200 ----- 37675 37675
40.77.167.109 21824 21824 -----
157.55.39.253 19683 ----- 19683
使用 Join 不起作用 - 我可以按照 Ravinder 在另一个线程中建议的那样使用 2 个文件来实现:Join two files including unmatched lines in Shell
此外,在下一次运行中,我将添加另一个 file4.log 到history.log 作为第四列。提前致谢。
最佳答案
您可以使用此 gnu awk
来组合具有与第一列值相同的键的多个文件:
awk -v OFS='\t' '{
a[$1][ARGIND] = $2
}
END {
for (i in a) {
printf "%s", i
for (j=1; j<ARGC; j++)
printf "%s", OFS (j in a[i] ? a[i][j] : "-----")
print ""
}
}' File*.log
207.46.13.90 37556 62343 85343
40.77.167.109 21824 21824 -----
157.55.39.51 34268 58451 59876
157.55.39.253 19683 ----- 19683
157.55.39.200 ----- 37675 37675
关于linux - 将多个文件合并为一个文件,包括 shell 中不匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59396273/