Trending News
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)
----------------------------------------------------
請問有人能指點一下要怎寫這個程式碼?
[guesta] vaild user / write list 這些都是固定的
只有後面的 test1 test2 test3這些不是固定的
當然這限定只用shell script寫
使用bash shell
3 Answers
- kkLv 41 decade agoFavorite 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 51 decade ago
要用啥 Shell ? bash, ksh, csh ....
2009-05-07 07:52:45 補充:
kk 兄, 您回答的問題我就不回答了; 基本上善用 bash 的指令 + gawk + regular expression 就可達很好的處理效果了 ─ 這是在下的處理方式。在下也想看看別人如何處理, 就贊助兩點了 ~~