在使用paste命令的时候,会发现输出的结果会有一些问题,比如我们存在一个文件,内容为:
#################################################################
DB workload
#################################################################
Current Instance
~~~~~~~~~~~~~~~~
DBID DB_NAME INST_NUM INST_NAME
---------- --------- ---------- ----------------
1028247664 TEST11G 1 TEST11G
1 row selected.
BEGIN_SNAP END_SNAP SNAPDATE DUR_MINS DBTIME
---------- ---------- -------------------------- ---------- ----------
289 290 04 May 2015 19:00 60 2
290 290 04 May 2015 22:55 10 0
2 rows selected.
使用paste 来合并文件内容,会发现格式有些错行。假设文件名为a2,则合并使用的命令是paste a2 a2,输出结果如下。可以看出标红的部分是错位的部分。
cat a1|awk '{print "select rpad('\''"$0 "'\'',100,'\'' '\'') "}' > b.sql
cat a2|awk '{print "|| rpad('\''"$0 "'\'',100,'\'' '\'') col2 from dual;"}' > c.sql
这个语句会把两个并行的文件拼接成select rpad(xxxx)||rpad(xxxxx) from dual;的形式,在最后输出内容的时候,直接运行这些select xxxx from dual形式的语句就可以了。
生辰了文件b.sql和c.sql之后,我们再次利用paste来合并,使用的命令即: paste b.sql c.sql
按理说这种合并是和文本格式无关的了。拼接后的语句类似下面的形式
select rpad('#################################################################',100,' ') || lpad('#################################################################',100,' ') col2 from dual;
select rpad('DB workload ',100,' ') || lpad('DB workload ',100,' ') col2 from dual;
select rpad('#################################################################',100,' ') || lpad('#################################################################',100,' ') col2 from dual;
select rpad(' ',100,' ') || lpad(' ',100,' ') col2 from dual;
select rpad('Current Instance ',100,' ') || lpad('Current Instance ',100,' ') col2 from dual;
但是实际输出的时候,问题依然存在。
尝试了使用substr来截取字符串,问题依旧。
cat a1|awk '{print "select substr('\''"$0 "'\'',1,120) "}' > b.sql
cat a2|awk '{print "|| substr('\''"$0 "'\'',1,120) col2 from dual;"}' > c.sql
paste b.sql c.sql > d.sql
使用substr(rpad(),1,100)的方式问题还是依旧。
cat a1|awk '{print "select substr(rpad('\''"$0 "'\'',100,'\'' '\''),1,100) col1 "}' > b.sql
cat a2|awk '{print ", substr(rpad('\''"$0 "'\'',100,'\'' '\''),1,100) col2 from dual;"}' > c.sql
看来对于这类文本的格式化还是需要做很多额外的工作来过滤了,任重道远,继续努力。