如果行与下一行包含相同数量的指定字符,则将行与下一行连接起来

如果行与下一行包含相同数量的指定字符,则将行与下一行连接起来

我需要concat包含指定数量的指定字符的行。我不知道,在pythonor中很容易ruby,但我想使用perl// sed/awk来执行此操作bash,而不使用任何循环或uniq -c。我需要计算行plus包含多少个字符,concat并且下一个如果包含相同数量的字符

a+a
a+a
a+a+a
a+a+a
a+a+a+a
a+a+a+a

输出应该是:

a+a + a+a
a+a+a + a+a+a
a+a+a+a + a+a+a+a

答案1

awk -F "+" 'NR%2{nf=NF;l=$0;next}{sep=(nf==NF?" + ":RS);printf "%s%s%s\n",l,sep,$0}' file

对于逐行分析,让我们展开它:

awk -F "+" '
  NR%2{nf=NF;l=$0;next}
  {
    sep=(nf==NF?" + ":RS)
    printf "%s%s%s\n",l,sep,$0
  }
' file
  • 将字段分隔符设置为+
  • 如果行号为奇数 ( NR%2),则将字段数放入 ,nf并将整个记录放入l
  • 别的,
    • 如果本行的字段数等于上一行的字段数,则设置sep=" + "。否则,设置sep=RSRS记录分隔符,是换行符)。
    • 打印lsep$0和换行符。

相关内容