一组4行用AWK管理的段落

tit*_*ule 5 sed awk text-processing

我有一个由 4 行的几个段落(超过 2000 个)组成的文件。对于每个段落,我需要匹配括号之间的内容,如下例所示。

所以对于每一段,

  • 条目是前两行。
  • 对于第三行,括号之间的当前内容将替换为第二行括号之间的内容。
  • 对于第四行,括号之间的当前内容将替换为第一行括号之间的内容。

我希望它足够清楚。

--输入--

A1 [A3 A4 A5] A2
B1 [B3 B4 B5] B2
C1 [C3 C4] C2
D1 [D3 D4] D2

E1 [E3 E4 E5] E2
F1 [F3 F4 F5] F2
G1 [G3 G4] G2
H1 [H3 H4] H2
Run Code Online (Sandbox Code Playgroud)

--输出--

A1 [A3 A4 A5] A2
B1 [B3 B4 B5] B2
C1 [B3 B4 B5] C2
D1 [A3 A4 A5] D2

E1 [E3 E4 E5] E2
F1 [F3 F4 F5] F2
G1 [F3 F4 F5] G2
H1 [E3 E4 E5] H2
Run Code Online (Sandbox Code Playgroud)

你有解决方案吗?使用 awk 和 gsub 我猜但问题是如何解决的。

Oh *_*ess 4

awk -F[][] -vOFS= '++i==1 {a=$2} i==2 {b=$2} i==3 {$2="[" b "]"} i==4 {$2="[" a "]"} !NF {i=0} 1' input.txt
Run Code Online (Sandbox Code Playgroud)

使用方括号作为字段分隔符,您的替换源/目标位于$2.

我们i在每一行上递增,并在段落之间将其重置为零。(1 through 4)的值i告诉我们如何处理$2