国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > 管理維護 > 正文

awk文本處理總結(高級篇)

2024-09-10 14:18:57
字體:
來源:轉載
供稿:網(wǎng)友

awk高級篇
 
 不管學習任何語言,我們學到的都是工具,工具知道的越多,我們做起工作來就越方便,但是工具在你的手里并不一定能造出好的產(chǎn)品,編輯腳本和編程序也是一樣的重要的是算法,別人不知道怎么處理的問題你要知道如何處理。這才能證明你比別人更高,工具只要你慢慢練習都會使用。
 
    下面給大家一個我認為是比較高級的問題了,感興趣的可以自己再想想更好的解決辦法。問題是這樣的我們有一個從ldap里導出的文件,它都是一行一個字段來說明的,每個用戶的數(shù)據(jù)是已空行分割的。我們必須把對應的uid 和userPassword找出來而且是對應的。
   
    例子:example4.txt
   
dn: uid=cailiying,domain=ccc.com.cn,o=mail.ccc.com.cn
uid: cailiying
userPassword:: e21kNX0zREl4VEIwODBJdXZkTnU3WFFtS3lRPT0=
letters: 300
quota: 100

dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100
uid: chenzheng
domain: cqc.com.cn

dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100

dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100
uid: chenzheng
domain: cqc.com.cn
                                                                                    處理這個文本我們需要考慮的問題是:
1 uid  和userPassword 并不是每一個段落里都有
2 在每一段里面uid和userPassword 先后順序是隨機的
3 有的段落里可能只有uid 或者只有userPassword

從文本上分析可以看出必須使用的間隔符號,一個是空行,一個是冒號。
冒號我們awk -F:就可以了,不過空行我們不好判斷現(xiàn)在想到length()這個函數(shù),在unix里空行最多只有一個字符,如果一行字符數(shù)小于2我們判斷為空行,好現(xiàn)在間隔符號問題解決,空行只能通過循環(huán)來實現(xiàn)對空行的判斷。                                        

現(xiàn)在碰到的另外一個問題是我們的某個段里的信息是不完全的,我們就要放棄這段這兒如何來做,就是要做兩個標記變量u 和 p  再做一個循環(huán)如果u  和  p 同事滿足我們才輸出結果下面的awk腳本就是通過這個思考來解決ldif文本的處理的!

# 此腳本的目的是方便我們以后導ldap的其他郵件的數(shù)據(jù),
# 我們之前使用slapdcat -l 導出所有信息,然后我們需要
# 整理出uid  password , 這里的設置都是默認以":" 間隔的
# 例slapcat -l user.ldif  如果想得到一份uid 和userPassword 對應的文件,
# 修改username = "dn"; password = "userpassword"; awk -f ldap2txt.awk user.ldif | grep uid | more  可以查看結果 (有可能是多域的郵件)
# 如果想得到domain 所對應的密碼,修改username = "dn"; password = "userpassword";  運行 awk -f ldap2txt.awk user.ldif |grep domain | more


#!/bin/awk -f
# File name: ldap2txt.awk

BEGIN {
        FS = ":";
        username = "uid";
        password = "userPassword";
}

{

        if(length($0) == 0 )
        {
                if (name != "u"  &&  pword != "p")
                {
                        printf ("%s:%s", name,pword);
                        name = "u";
                        pword = "p";
                }
        }

        else 
        {
                if ($1 == username)
                {
                name = "u";
                name = $0;
                }
                else if($1 == password)
                {
                pword = "p";
                pword = $0;
                }
        }
}
END {

}

實際上對于學習語言首先是熟悉一些常用的函數(shù),然后就是試著去解決別人解決過的問題,然后自己再思考一下是不是有更好,速度更快的解決辦法,實際上大部分的程序員都是在重復的使用著別人好的解決辦法,把別人的方法轉變?yōu)樽约旱姆椒ǎ褪欠磸途毩暯鉀Q不同的問題,思考更好的方法!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新兴县| 莎车县| 米易县| 孙吴县| 民乐县| 蓬溪县| 佛教| 乡城县| 富民县| 乌拉特后旗| 廉江市| 九龙坡区| 遵化市| 怀仁县| 晋州市| 金昌市| 蓬安县| 怀安县| 阳信县| 泽州县| 常宁市| 康平县| 阳江市| 淳化县| 萨嘎县| 如东县| 武城县| 桦川县| 静海县| 久治县| 绥棱县| 元阳县| 禹州市| 淮南市| 辉南县| 璧山县| 远安县| 屏山县| 高密市| 彝良县| 佛山市|