我需要concat
包含指定数量的指定字符的行。我不知道,在python
or中很容易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=RS
(RS
记录分隔符,是换行符)。 - 打印
l
、sep
、$0
和换行符。
- 如果本行的字段数等于上一行的字段数,则设置