我有两个文件。 第一个文件是这样的:
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行。
还有其他办法吗?
此致
答案 0 :(得分:3)
使用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/|$//'
相同,但没有 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/|$//'