我有一些“某种 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/