bash:对文件的各个部分进行排序

标签 bash awk sed

我有一些“某种 SQL”文件,我想对其进行部分排序 - 以便稍后能够将它们相互比较。

CREATE TABLE BBBBBB
(
   ID bigint NOT NULL
   NAME varchar(50)
   CURRENCY varchar(3)
   SYS_START timestamp NOT NULL
   SYS_END timestamp NOT NULL
   TS_ID timestamp NOT NULL
   EXPORT int
)

CREATE TABLE AA
(
   ID bigint NOT NULL
   SYS_START timestamp NOT NULL
   SYS_END timestamp NOT NULL
   TS_ID timestamp NOT NULL
   NAME varchar(100) NOT NULL
)

我只想对括号内的部分进行排序。输出应该是这样的:

CREATE TABLE BBBBBB
(
   CURRENCY varchar(3)
   EXPORT int
   ID bigint NOT NULL
   NAME varchar(50)
   SYS_END timestamp NOT NULL
   SYS_START timestamp NOT NULL
   TS_ID timestamp NOT NULL
)

CREATE TABLE AA
(
   ID bigint NOT NULL
   NAME varchar(100) NOT NULL
   SYS_END timestamp NOT NULL
   SYS_START timestamp NOT NULL
   TS_ID timestamp NOT NULL
)

我试图将括号中的部分放入 sed 保留缓冲区并对它们进行排序,但我没有走得太远......我现在没有其他想法。

最佳答案

使用awk:

awk 'i {a[l++]=$0}
     /^\(/ {print; i=1}
     /^\)/ {n=asort(a); for(k=1; k<=n; k++){print a[k]} i=0; delete a; next}
     !i' File

关于bash:对文件的各个部分进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160881/

相关文章:

json - 使用 bash 脚本合并 JSON 文件

linux - 使用 linux 命令列出给定时间之间目录中的文件

linux - 如何删除特定字符串之前的所有内容

bash 脚本在获取时产生不同的结果

GIT,检查命令的返回码(bash 脚本)

Bash/从字符串中获取子字符串

python - 如何检查脚本是从终端调用还是从另一个脚本调用

linux - 来自管道的编号参数

linux - 如何使用类似于 SQL JOIN 的 awk/sed/grep/bash 加入文件

linux - 将一个大文本文件重新格式化为一行字符串(通过 BASH)