乙個稍微複雜的awk sed應用

2021-09-30 05:28:12 字數 2421 閱讀 6503

最近做了乙個文字

cdr轉換器,從

a樣式轉換為

b樣式,如下所示。

a樣式

b樣式

a樣式到b樣式的轉換要點如下:1.

header

和trailer

都可直接轉換,但是

b樣式需要加上

cdr的計數 2.

b樣式的header

還含有record type

,需要從

a樣式的某個注釋行中獲取 3.

字段域的轉換比較簡單,都是一行對一行 4.

a樣式有注釋行,轉換時要全部刪除

轉換由awksed完成,完整的命令是這樣的:

awk 'begin else if ( $0 == "." ) else }' layout_a | sed '/^record/' | sed 's/^/(record (.*)/).*input_type /(.*/)$//1 "/2"/;s/^f /(.*/) /(.*/)$/   "/1" = "/2"/;/^#/d' > layout b

具體解析如下:1.

awk 'begin else if ( $0 == "." ) else }'layout_a | sed '/^record/' | sed 's/^/(record (.*)/).*input_type /(.*/)$//1 "/2"/;s/^f /(.*/) /(.*/)$/   "/1" = "/2"/;/^#/d' > layout b 判斷

cdr的

header

和trailer

。如果是

header

,即該行內容為

」record」

,計數器加一,且輸出

」record (?)」

到下一步;如果是

trailer

,即該行內容為

」.」,輸出

」end of record (?)」

到下一步;否則,不作修改輸出到下一步。 2.

awk 'begin else if ( $0 == "." ) else }' layout_a |sed '/^record/'| sed 's/^/(record (.*)/).*input_type /(.*/)$//1 "/2"/;s/^f /(.*/) /(.*/)$/   "/1" = "/2"/;/^#/d' > layout b 遇到

header

,合併後續三行。因為第四行保留了該

cdr的

record type。

3. awk 'begin else if ( $0 == "." ) else }' layout_a | sed '/^record/' | sed 's/^/(record (.*)/).*input_type /(.*/)$//1 "/2"/;

s/^f /(.*/) /(.*/)$/   "/1" = "/2"/;/^#/d' > layout b

從上一步生成的

header

提取合適的內容,形成

b樣式的

header

。注意括號的運用。 4.

awk 'begin else if ( $0 == "." ) else }' layout_a | sed '/^record/' | sed 's/^/(record (.*)/).*input_type /(.*/)$//1 "/2"/;s/^f /(.*/) /(.*/)$/   "/1" = "/2"/;/^#/d' > layout b

提取各個欄位的鍵和值,並加上雙引號,形成

b樣式的字段域。同樣注意括號的運用。 5.

awk 'begin else if ( $0 == "." ) else }' layout_a | sed '/^record/' | sed 's/^/(record (.*)/).*input_type /(.*/)$//1 "/2"/;s/^f /(.*/) /(.*/)$/   "/1" = "/2"/;/^#/d' > layout b

刪除剩餘的注釋行。

寫了乙個稍微複雜點的sql心得

select pcode from select h.k,h.d,h.m,h.u,l.areacode,l.areacode substr h.u,4,length h.u h.k pcode from select j.k,j.d,j.m,j.u from select lpad f,3,0 as...

拆分乙個稍微有點複雜的字串,用c 實現

原文 字串為 3,0 5,0 6,0 7,0 8,0 9,0 需要將其拆分,首先以 拆分開,然後 3,0表示鍵值,他們是一組的,可以分別提取到。如何快速實現,泛型,陣列,請給乙個示例,謝謝。string s 3,0 5,0 6,0 7,0 8,0 9,0 regex reg new regex d,...

乙個複雜的sql

select f.course node info id as nodeid,c.course node name as nodename,c.course node type as nodelevel,c.course code,case when select course node info ...