Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

Shell Script檔案切割轉入陣列問題

請教各位大大

小弟想將下面這個文字檔

------------------------------------------------------

[guesta]

valid users = test1,test2,test3

write list = test1,test2

[guestb]

write list = test1,test2,test3

valid users = test1,test2,test3

------------------------------------------------------

將文字內容轉入陣列

結果像是如下這樣子

---------------------------------------------------

guestawritelist=(test1,test2)

guestavalidusers=(test1,test2,test3)

guestawritelist=(test1,test2,test3)

guestavalidusers=(test1,test2,test3)

----------------------------------------------------

請問有人能指點一下要怎寫這個程式碼?

Update:

[guesta] vaild user / write list 這些都是固定的

只有後面的 test1 test2 test3這些不是固定的

當然這限定只用shell script寫

Update 2:

使用bash shell

3 Answers

Rating
  • kk
    Lv 4
    1 decade ago
    Favorite Answer

    您好! ^^

    由於小弟也沒做過類似的處理

    所以就用土法煉鋼的方式提供給您參考 ^^"

    若來源檔的格式就如您給的一樣

    ( 包括空格、符號等 )

    我是用下列方式 "硬" 把它做成您要的樣子~

    只是貼來貼去和轉換取代符號等等的動作而已

    假設來源檔的檔名為 test.txt

    --------------------------------------------------------------------------------

    #!/bin/bash

    for i in $(sed 's/\[//;s/\]//' test.txt | grep 'guest')

    do

    echo $i >> /tmp/guest.txt

    echo $i >> /tmp/guest.txt

    done

    egrep 'valid|write' test.txt | awk '{print $1$2$3"("$4")"}' | tr ',' ' ' > /tmp/list.txt

    paste /tmp/guest.txt /tmp/list.txt | sed 's/\t//' > guestArray.txt

    rm -f /tmp/guest.txt /tmp/list.txt

    ## edited by kk 2009/05/06

    --------------------------------------------------------------------------------

    因為您要變成陣列的儲存方式

    所以 "逗號" 的地方應該要變成 "空格"

    執行完會得到 guestArray.txt 這個檔

    內容應該就有達到您的需求了!

    guestavalidusers=(test1 test2 test3)

    guestawritelist=(test1 test2)

    guestbwritelist=(test1 test2 test3)

    guestbvalidusers=(test1 test2 test3)

    不過老實說~這是一個寫死的方式

    若格式稍有不同~處理的結果也就會有問題!

    例如~[guesta]、vaild user、write list 三個為一組的情況

    若少其中一個~內容就會亂掉

    而 awk 撈欄位的地方~

    是將 "valid"、"users"、"="、"test1,test2,test3" 分成四個欄位

    ( 因為來源檔它們彼此間有空格 )

    所以將格式做好後才把 "逗號" 轉換成 "空格"

    最後就是將它們用 paste 做合併而已~沒啥技巧可言

    真的是土法煉鋼~呵 ^^"

    所以這樣的內容您隨意看看就好~

    也許能夠幫助您想到其他的處理方式~ ^^

    Good Luck!!

    MyBlog: kk筆記&討論交流(哈啦)

    2009-05-06 14:30:50 補充:

    真巧~又遇到 "是我" 兄了 ^^

    不知道您有沒有比較好的處理方式~提供給大家參考一下

    之前有看過您回答的幾個問題

    對於處理上的考慮都比我細膩多了 ( 所以小弟對您有印象 ^^ )

    我回答的內容只是土法煉鋼~真的是...

    因為我一時也想不出怎麼處理比較好~ ^^"

    2009-05-07 18:54:50 補充:

    to "是我" 兄

    原來是您贊助點數的~

    不過小弟寫的東西~可能沒啥好參考的!

    還請多包涵啊!! ^^"

    Source(s): kk(我)
  • 是我
    Lv 5
    1 decade ago

    要用啥 Shell ? bash, ksh, csh ....

    2009-05-07 07:52:45 補充:

    kk 兄, 您回答的問題我就不回答了; 基本上善用 bash 的指令 + gawk + regular expression 就可達很好的處理效果了 ─ 這是在下的處理方式。在下也想看看別人如何處理, 就贊助兩點了 ~~

  • James
    Lv 4
    1 decade ago

    請問有特別指明要用什麼程式寫嗎?

    文字檔的格式是固定的嗎?

    例如

    [guesta]

    valid users=

    write list =

    這些字都是固定的嗎?

Still have questions? Get your answers by asking now.