Linux bash:比较两个文件以追加列
我有两个文件。 第一个文件如下所示:Linux bash:比较两个文件以追加列,linux,bash,shell,posix,Linux,Bash,Shell,Posix,我有两个文件。 第一个文件如下所示: 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 nam
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_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
第一个文件很大,因此在读取行时使用,并对第一个文件的每一行执行grep
需要很长时间。第二个文件只有5或6行
还有别的办法吗
使用bash
,join
,tr
,以及sed
,表示对的关注:
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/|$//'
join-t'|'-j1-o1.1,2.2,2.3,1.4,1.5,1.6,1.7-一个文件1,假设您可以将文件2转换为使用
fldseps,人工连接
。祝你好运。请看