Bash

如果兩者都包含相同數量的指定字元,則與下一行連接

  • October 20, 2020

我需要concat包含指定數量的指定字元的行。我不知道,在pythonor中很容易ruby,但我想使用perl/ sed/ awk/來做到這一點bash,而不使用任何循環 or 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
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和換行符。

引用自:https://unix.stackexchange.com/questions/615567