我有一个制表符定界file
:
qrs John tuv
abcd Sam efgh
ijk Sam lmnp
abcd Sam efgh
ijk Sam lmnp
qrs John tuv
我正在尝试打印第二个字段与第二个字段中的上一行的值不匹配的行,并打印第二个字段与下一行不匹配的行。
我一直在玩以下内容的变体,但是没有什么能像我期望的那样正常工作:
awk -F"\t" '{
name=$3;
line=$0;
getline;
newname=$3;
newline=$0;
getline;
nextname=$3;
nextline=$0;
if (newname != name || name != nextname)print line"\n"nextline }' input.txt
根据您的评论,我假设它是一个具有登录和注销日期的日志文件,例如:
date1 John logout
date2 Sam login
date3 Sam work1
date4 Sam work2
date5 Sam logout
date6 John login
用途awk
:
awk 'NR!=1&&$2!=f{print p"\n"$0} {f=$2; p=$0}' file
在哪里:
NR!=1
awk
处理除第一NR
行以外的所有行时为true (包含当前文件中的行号)$2!=f
将第二个字段$2
与变量的值进行比较f
(f
稍后将进行设置)
awk
打印的值p
(前一行,也将在以后设置),换行符\n
和当前行$0
。f
设置为第二个字段$2
,变量p
设置为当前行$0
。两者都将在下一次迭代中使用(处理下一行时)。现在将打印第二个字段的第一次和最后一次出现,因此注销和登录日期和名称。输出将是:
date1 John logout
date2 Sam login
date5 Sam logout
date6 John login
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句