如何使用 AWK 重新格式化表格数据?

Sat*_*ish 1 awk text-processing

我有一个包含以下输出的文件。

ora.abc.db
      1        ONLINE  ONLINE       serverA              Open
      2        ONLINE  ONLINE       serverB              Open
ora.xyz.db
      1        ONLINE  ONLINE       serverA              Open
      2        ONLINE  ONLINE       serverB              Open
      2        ONLINE  ONLINE       serverC              Open
Run Code Online (Sandbox Code Playgroud)

我想用以下方式格式化这个文件,但我只想使用shell script,我相信我们可以使用 awk 但我没有逻辑

abc  abc1  ONLINE serverA
abc  abc2  ONLINE serverB
xyz  xyz1  ONLINE serverA
xyz  xyz2  ONLINE serverB
xyz  xyz3  ONLINE serverC
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 5

这可以是一种方法:

$ awk '/^ora/ {split($0,a,"."); next} {print a[2], a[2]$1, $2, $4}' a
abc abc1 ONLINE serverA
abc abc2 ONLINE serverB
xyz xyz1 ONLINE serverA
xyz xyz2 ONLINE serverB
xyz xyz2 ONLINE serverC
Run Code Online (Sandbox Code Playgroud)

解释

  • /^ora/适用于以ora.开头的行。在那些中,split基于点的内容.并将其存储在数组中a。因此,它是a[1]=oraa[2]=abc...然后nextawk跳转到下一行。
  • print打印数组的第二个字段a加上行中的不同元素:$1说明第一个,$4说明第四个。