我有一个文本文件,其中包含时间戳的唯一行。下面是该文本文件中的行的示例:
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