繁体   English   中英

bash:比较两个文件以追加列

[英]bash: compare between two files to append columns

我有两个文件。 一个文件是这样的:

name_service1|||S_SUCCESS||1111111111
name_service1|||S_SUCCESS||1111111112
name_service1|||S_SUCCESS||1111111113
name_service1|||S_SUCCESS||1111111114
name_service1|||S_SUCCESS||1111111115
name_service1|||S_SUCCESS||1111111116
name_service1|||S_SUCCESS||1111111117
name_service1|||S_SUCCESS||1111111118

第二个文件是这样的:

name_service1,20160705,0900
name_service2,20160705,0800

我需要通过name_service字段对两个文件进行比较,当两个字段相同时,添加日期和小时; 就像是:

name_service1|20160705|0900|S_SUCCESS||1111111111
name_service1|20160705|0900|S_SUCCESS||1111111112
name_service1|20160705|0900|S_SUCCESS||1111111113
name_service1|20160705|0900|S_SUCCESS||1111111114
name_service1|20160705|0900|S_SUCCESS||1111111115
name_service1|20160705|0900|S_SUCCESS||1111111116
name_service1|20160705|0900|S_SUCCESS||1111111117
name_service1|20160705|0900|S_SUCCESS||1111111118

第一个文件很大,因此使用while read行并对第一个文件的每一行执行grep会花费很长时间。 第二个文件只有5或6行。

还有另一种方法吗?

问候

使用bashjointrsed

join -t '|' -j 1 -o 1.1,2.2,2.3,1.4,1.5,1.6,1.7 -a 1 file1 <(tr ',' '|' < file2) | \
sed 's/|$//'

相同,但没有bash isms:

tr ',' '|' < file2 | \
join -t '|' -j 1 -o 1.1,2.2,2.3,1.4,1.5,1.6,1.7 -a 1 file1 - | \
sed 's/|$//'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM