如果值或两个连续行与列不匹配,如何打印分隔符

mon*_*onk 5 bash awk

我输入如下,如果两行之间的第三列的值不同,我需要在行之间放置一个分隔符.

one two three four
five six three seven
eight nine ten elevel
alpha beta ten gama
tango charlie oscar bla
Run Code Online (Sandbox Code Playgroud)

预期结果:

one two three four
five six three seven
=
eight nine ten elevel
alpha beta ten gama
=
tango charlie oscar bla
Run Code Online (Sandbox Code Playgroud)

这是我认为会起作用但不是.

awk '{col3=$3;next} $3!=col3{$0="\n="$0;print $0}' input
Run Code Online (Sandbox Code Playgroud)

Jam*_*own 9

$ awk '$3!=p && NR>1 { print "=" } { print; p=$3 }' file
one two three four
five six three seven
=
eight nine ten elevel
alpha beta ten gama
=
tango charlie oscar bla
Run Code Online (Sandbox Code Playgroud)


Ini*_*ian 5

Awk补充詹姆斯答案的另一种变体(或者说是相同的?用不同的方式写成),

awk '{ if ($3 != old && NR>1) { print "=" } print; old = $3; }' file
Run Code Online (Sandbox Code Playgroud)

这个想法基本上是$3从每一行备份,基本上如果它在下一个打印中变化所需的字符串.这NR>1只是跳过第一行打印的条件.

  • 它的写法不同(不太习惯). (2认同)

Aks*_*gde 5

$ awk 'p!=$3{if(NR>1)print "="; p=$3}1' file 
one two three four
five six three seven
=
eight nine ten elevel
alpha beta ten gama
=
tango charlie oscar bla
Run Code Online (Sandbox Code Playgroud)