Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash:比较两个文件以追加列_Linux_Bash_Shell_Posix - Fatal编程技术网

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,
人工连接
。祝你好运。请看