在行中搜索字符串并将该行仅打印一次到另一个文件

在行中搜索字符串并将该行仅打印一次到另一个文件

我有一个文本文件,其中包含时间戳的唯一行。下面是该文本文件中的行的示例:

111.111.11.11:2017 年 6 月 18 日 08:01:34:abc\约翰·多伊1视窗...

111.111.11.11:2017 年 6 月 18 日 09:01:34:abc\约翰·多伊2视窗...

111.111.11.11:2017 年 6 月 18 日 09:30:34:abc\约翰·多伊2视窗...

111.111.11.11:2017 年 6 月 18 日 10:01:34:abc\约翰·多伊3视窗...

111.111.11.11:2017 年 6 月 18 日 11:01:34:abc\约翰·多伊1视窗...

111.111.11.11:2017 年 6 月 18 日 12:01:34:abc\约翰·多伊3视窗...

111.111.11.11:2017 年 6 月 18 日 13:01:34:abc\约翰·多伊3视窗...

...

这些线路有很长的路要走。我需要移动第一次出现的行约翰·多伊1发生在另一个文本文件中,并忽略其中包含 john.doe1 的所有其他行。我必须对整个文件执行相同的操作,该文件有很多很多约翰·多斯

我到另一个文件的输出应如下所示:

111.111.11.11:2017 年 6 月 18 日 08:01:34:abc\约翰·多伊1视窗...

111.111.11.11:2017 年 6 月 18 日 09:01:34:abc\约翰·多伊2视窗...

111.111.11.11:2017 年 6 月 18 日 10:01:34:abc\约翰·多伊3视窗...

问题是约翰·多斯通常是真实姓名,我以前不知道它们,我只知道它们出现在字符“\”和“ ”之间。

答案1

扩展熟悉的 Awk 重复数据删除习惯用法,使用匹配的子字符串而不是分隔字段:

awk 'match($0, /\\[^ ]*/) && !seen[substr($0,RSTART,RLENGTH)]++' file

相关内容