最近做了乙個文字
cdr轉換器,從
a樣式轉換為
b樣式,如下所示。
a樣式
b樣式
a樣式到b樣式的轉換要點如下:1.
header
和trailer
都可直接轉換,但是
b樣式需要加上
cdr的計數 2.
b樣式的header
還含有record type
,需要從
a樣式的某個注釋行中獲取 3.
字段域的轉換比較簡單,都是一行對一行 4.
a樣式有注釋行,轉換時要全部刪除
轉換由awk和sed完成,完整的命令是這樣的:
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 ...