2014-01-17 86 views
0

我有一個文件,我想用sed解析,但經過多次嘗試後,我沒有成功。 這是源文件:Bash解析文件使用sed

. . exported "SCHEMA1"."IJK_ECX_LEDGER_HST_2009"   806.6 KB 25391 rows 
. . exported "SCHEMA1"."IJK_ECX_JGEN_ACCT_ENTRY_HST_2009" 1.000 MB 25591 rows 
. . exported "SCHEMA2"."IJK_ECX_JRNL_LN_HST_2009"   1.156 MB 25596 rows 
. . exported "SCHEMA2"."IJK_ECX_OPEN_ITEM_GL_HST_2009"  663.4 KB 15062 rows 
. . exported "SCHEMA1"."IJK_ECX_XLATITEM_HST_2009"   932.9 KB 42277 rows 
. . exported "SCHEMA1"."IJK_ECX_JRNL_HEADER_HST_2009"  9.585 KB  4 rows 
. . exported "SCHEMA5"."IJK_ECX_CA_JGEN_CHQ_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA1"."IJK_ECX_CA_JRNL_LN_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA5"."IJK_ECX_DISTRIB_LINE_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA1"."IJK_ECX_GP_ACC_LINE_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA5"."IJK_ECX_IN018_JRNL_H_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA1"."IJK_ECX_IN094_A_SUIV_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA5"."IJK_ECX_IN094_B_SUIV_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA5"."IJK_ECX_IN094_LN_AUD_HST_2009"   0 KB  0 rows 
. . exported "SCHEMA0"."IJK_ECX_JGEN_ACT_HST_2009"    0 KB  0 rows 
. . exported "SCHEMA1"."IJK_ECX_JGEN_CASH_HST_2009"    0 KB  0 rows 

這就是我想要的東西:逗號對應的行數後

IJK_ECX_LEDGER_HST_2009,25391 
IJK_ECX_JGEN_ACCT_ENTRY_HST_2009,25591 
IJK_ECX_JRNL_LN_HST_2009,25596 
IJK_ECX_OPEN_ITEM_GL_HST_2009,15062 
IJK_ECX_XLATITEM_HST_2009,42277 
IJK_ECX_CA_JGEN_CHQ_HST_2009, 0 
IJK_ECX_CA_JRNL_LN_HST_2009,0 
IJK_ECX_DISTRIB_LINE_HST_2009,0 
IJK_ECX_GP_ACC_LINE_HST_2009,0 
IJK_ECX_IN018_JRNL_H_HST_2009,0 
IJK_ECX_IN094_A_SUIV_HST_2009,0 
IJK_ECX_IN094_B_SUIV_HST_2009,0 
IJK_ECX_IN094_LN_AUD_HST_2009,0 
IJK_ECX_JGEN_ACT_HST_2009,0 
IJK_ECX_JGEN_CASH_HST_2009,0 

數。 你有什麼想法我可以做到這一點? 感謝您的幫助,

史蒂夫

+0

'但許多attemps後,我沒有succeed' - 考慮發佈您的嘗試。 – devnull

+0

我發現這個作品,但有另一種方式嗎? cat test.txt | grep「。」導出「| sed's /。 。導出「[AZ] *」。「// g'| sed's/rows // g'| sed's /」[^「] * /,/ g' – user2269756

回答

3

使用awk:

awk '{printf "%s%s\n", $4, $7}' file | awk -F\" '{printf "%s,%s\n", $4,$5}' 
IJK_ECX_LEDGER_HST_2009,25391 
IJK_ECX_JGEN_ACCT_ENTRY_HST_2009,25591 
IJK_ECX_JRNL_LN_HST_2009,25596 
IJK_ECX_OPEN_ITEM_GL_HST_2009,15062 
IJK_ECX_XLATITEM_HST_2009,42277 
IJK_ECX_JRNL_HEADER_HST_2009,4 
IJK_ECX_CA_JGEN_CHQ_HST_2009,0 
IJK_ECX_CA_JRNL_LN_HST_2009,0 
IJK_ECX_DISTRIB_LINE_HST_2009,0 
IJK_ECX_GP_ACC_LINE_HST_2009,0 
IJK_ECX_IN018_JRNL_H_HST_2009,0 
IJK_ECX_IN094_A_SUIV_HST_2009,0 
IJK_ECX_IN094_B_SUIV_HST_2009,0 
IJK_ECX_IN094_LN_AUD_HST_2009,0 
IJK_ECX_JGEN_ACT_HST_2009,0 
IJK_ECX_JGEN_CASH_HST_2009,0 

編輯:如果沒有第二部分運行它的輸出結果如下:

"SCHEMA1"."IJK_ECX_LEDGER_HST_2009"25391 

爲了達到你想要的輸出,我們必須再次用第二個awk部分分割。 -F\"表示拆分爲"並僅打印值4和5,逗號分隔。

+0

謝謝你,這正是我想要的!但我不知道這部分(awk -F \''{printf'%s,%s \ n「,$ 4,$ 5}')是如何工作的,您能否向我解釋一下? – user2269756

+0

@ user2269756請參閱我的編輯 – chaos

0
sed 's/^.*"."\([^"]*\)"[[:blank:]]\{1,\}\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{2\}\([0-9]\{1,\}[[:blank:]].*/\1,\3/' YourFile 

在GNU sed的添加-posix