亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

2024-09-10 14:18:57
字體:
來源:轉載
供稿:網友

awk中級篇
這里順便介紹一下vi的一個替換命令,現在我們要把example1.txt文本里的空格都替換為“:”冒號這里在vi里使用的命令就是:

%s/ /:/g     

這個命令對于使用vi的人來說是用得最多的。我們現在做了一個新的文件example2.txt。

user1:password1:username1:unit1:10
user2:password2:username2:unit2:20
user3:password3:username3:unit3:30

現在我們來做一個awk腳本,之前都是在命令行操作,實際上所有的操作在命令行上是可以都實現的,已我們最經常使用的批量添加用戶來開始!

script1.awk

#!/bin/awk -f   # 當文件有可執行權限的時候你可以直接執行
                # ./script1.awk example2.txt
                # 如果沒有以上這行可能會出現錯誤,或者
                # awk -f script1.awk example2.txt 參數f指腳本文件

BEGIN {         # “BEGIN{”是awk腳本開始的地方
    FS=":";     # FS 是在awk里指分割符的意思
}

{                                # 接下來的“{” 是內容部分
      print "add {";             # 以下都是使用了一個awk函數print
      print "uid=" $1;
      print "userPassword=" $2;
      print "domain=eyou.com" ;
      print "bookmark=1";
      print "voicemail=1";
      print "securemail=1"
      print "storage=" $5;
      print "}";
      print ".";
}                               # “}”    內容部分結束
END {                           # “END{” 結束部分
    print "exit";
}

執行結果
[root@mail awk]# awk -f script1.awk example2.txt
add {
uid=user1
userPassword=password1
domain=eyou.com
bookmark=1
voicemail=1
securemail=1
storage=10
}
.              
.
.
.
.
.
exit

文本操作就是更方便一些。

下面給兩個返回效果一樣的例子
[root@mail awk]# awk -F: '{print $1"@"$2}' example2.txt
[root@mail awk]# awk -F: '{printf "%s@%s",$1,$2}' example2.txt

user1@password1

這里的區別是使用print 和printf的區別,printf格式更自由一些,我們可以更加自由的指定要輸出的數據,print會自動在行尾給出空格,而printf是需要給定" "的,如果感興趣你可以把“”去掉看一下結果。%s代表字符串%d 代表數字,基本上%s都可以處理了因為在文本里一切都可以看成是字符串,不像C語言等其他語言還要區分數字、字符、字符串等。

awk還有一些很好的函數細細研究一下還是很好用的。


這次碰到了一個問題客戶有一個用戶列表,大概有2w用戶,他有一個有趣的工作要做,就是把每個賬戶目錄放到特定的目錄下,例如13910011234這個目錄要放到139/10/這個目錄下,從這里可以看出規律是手機號碼的前三位是二級目錄名,手機的第3、4為是三級目錄名,我們有的就只有一個用戶列表,規律找到了我們現在開始想辦法處理吧。

example3.txt

13910011234     
15920312343
13922342134
15922334422
......

第一步是要找到一個方法來吧,就是要把每一個手機號分開,最初可能你就會想到這個也沒有任何間隔,我們怎么用awk分開他們呢?說實話最初我也考慮了20多分鐘,后來想起原來學習python的時候有split函數可以分就想找找awk里是不是有類似的函數,man awk 發現substr 這個函數子串,

[root@mail awk]# awk '{print substr($1,1,3)}'  example3.txt

[root@mail awk]# awk '{printf "%s/%s",substr($1,1,3),substr($1,4,2)}'  example3.txt

[root@mail awk]# awk '{printf "mv %s %s/%s",$1,substr($1,1,3),substr($1,4,2)}'  example3.txt

以上的兩步的返回自己做一下,最后我們就得到了我們想要的結果。

mv 13910011234 139/10
mv 15920312343 159/20
mv 13922342134 139/22
mv 15922334422 159/22

把這部分輸出拷貝到一個shell腳本里,在數據當前目錄下執行就可以了!

substr(s, i [, n])      Returns  the at most n-character substring of s
                               starting at i.  If n is omitted, the rest of  s
                               is used.
                              
substr函數解釋,s代表我們要處理的字符串,i 是我們從這個字符串的第幾個位置上開始,n 是我們從開始的位置取多少個字符。多看看man英文也會有所提高的。                              

awk有很多有趣的函數如果感興趣可以自己去查查看,
man awk
String Functions  字符串函數,舉幾個覺得常用的函數
    length([s])             Returns  the  length  of  the  string s, or the
                               length of $0 if s is not supplied.
    length 你可以得到字符串的長度,這個是比較常用的一個函數                         
    split(s, a [, r])       Splits the string s into the  array  a  on  the
                               regular expression r, and returns the number of
                               fields.  If r is omitted, FS is  used  instead.
                               The   array  a  is  cleared  first.   Splitting
                               behaves   identically   to   field   splitting,
                               described above.    
                              
        tolower(str)            Returns  a copy of the string str, with all the
                               upper-case  characters  in  str  translated  to
                               their  corresponding  lower-case  counterparts.
                               Non-alphabetic characters are left unchanged.
                              
        toupper(str)            Returns a copy of the string str, with all  the
                               lower-case  characters  in  str  translated  to
                               their  corresponding  upper-case  counterparts.
                               Non-alphabetic characters are left unchanged.
                                                                                    Time Functions  時間函數,我們最最常用到的是時間戳轉換函數
                                                                                  
strftime([format [, timestamp]])
                 Formats  timestamp  according to the specification in format.
                 The timestamp should be of the same form as returned by  sys-
                 time().   If timestamp is missing, the current time of day is
                 used.  If format is missing, a default format  equivalent  to
                 the output of date(1) is used.  See the specification for the
                 strftime() function in ANSI C for the format conversions that
                 are  guaranteed  to be available.  A public-domain version of
                 strftime(3) and a man page for it come  with  gawk;  if  that
                 version  was  used to build gawk, then all of the conversions
                 described in that man page are available to gawk.                                                                                  
                                                                                  
這里舉例說明時間戳函數是如何使用的

[root@ent root]# date +%s | awk '{print strftime("%F %T",$0)}'
2008-02-19 15:59:19        

我們先使用date命令做一個時間戳,然后再把他轉換為時間                                                                                             
還有一些我們現在可能不經常用到的函數,詳細內容man awk 自己可以看一下。
 Bit Manipulations Functions   二進制函數
 Internationalization Functions  國際標準化函數
 
 USER-DEFINED FUNCTIONS      用戶也可以自己定義自己的函數,感興趣自己可以再深入研究一下。
 
 For example:

              function  f(p, q,     a, b)   # a and b are local
              {
                   ...
              }

              /abc/     { ... ; f(1, 2) ; ... }
 DYNAMICALLY LOADING NEW FUNCTIONS  動態加載新函數,這個可能就更高級一些了!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产欧美激情| 国产亚洲欧洲高清| 久久久91精品国产一区不卡| 97超碰国产精品女人人人爽| 91精品视频一区| 久久久久久久国产精品| 国产精品黄色影片导航在线观看| 成人国产在线激情| 亚洲国产日韩欧美综合久久| 精品久久久在线观看| 久久久久女教师免费一区| 国产第一区电影| www.日本久久久久com.| 欧日韩不卡在线视频| 国产美女久久精品| 午夜精品在线视频| 欧美极品美女视频网站在线观看免费| 中文字幕亚洲字幕| 66m—66摸成人免费视频| 亚洲成av人片在线观看香蕉| 国产精品中文字幕在线观看| 成人在线中文字幕| 国产欧洲精品视频| 成人久久一区二区三区| 亚洲系列中文字幕| 欧美日韩国产精品专区| 亚洲精品国精品久久99热| 欧美成人免费网| 色偷偷av亚洲男人的天堂| 亚洲视频在线观看免费| 欧美日韩性生活视频| 国产精品久久久久福利| 成人激情视频在线观看| 欧美在线精品免播放器视频| 欧美性受xxxx白人性爽| 98精品国产自产在线观看| 欧美一级电影免费在线观看| 大伊人狠狠躁夜夜躁av一区| 正在播放欧美一区| 亚洲国产日韩欧美在线99| 午夜精品美女自拍福到在线| 欧美另类极品videosbestfree| 久99九色视频在线观看| 国产精品久久久久aaaa九色| 青青草99啪国产免费| 久久免费成人精品视频| 日韩国产在线播放| 中文字幕精品一区二区精品| 精品国产一区二区三区在线观看| 欧美黄色www| 日韩欧美999| 色无极影院亚洲| 国产日产欧美精品| 国产成人免费av| 久久久久久久久久久久av| 亚洲综合中文字幕在线观看| 懂色av中文一区二区三区天美| 精品中文字幕久久久久久| 亚洲国产女人aaa毛片在线| 欧美丰满少妇xxxx| 97精品欧美一区二区三区| 91国产视频在线| 日韩av123| 成人免费自拍视频| 亚洲国产精品成人va在线观看| 欧美激情啊啊啊| 不卡在线观看电视剧完整版| 亚洲男人第一av网站| 国产一区欧美二区三区| 日韩av在线播放资源| 欧美精品制服第一页| 中文字幕在线精品| 日本sm极度另类视频| 久久韩剧网电视剧| 日韩在线观看免费全| 日本中文字幕成人| 亚洲欧美激情在线视频| 国产成人在线精品| 亚洲精品小视频在线观看| 欧美性videos高清精品| 成人xvideos免费视频| 97国产suv精品一区二区62| 久久精品中文字幕一区| 亚洲r级在线观看| 亚洲成人激情在线观看| 欧美多人乱p欧美4p久久| 不卡av电影院| 在线成人激情视频| 日韩欧美亚洲综合| 亚洲免费一级电影| 国产精品中文字幕久久久| 亚洲国产精品嫩草影院久久| 亚洲国产日韩欧美在线99| 精品国产自在精品国产浪潮| 中日韩午夜理伦电影免费| 亚洲精品98久久久久久中文字幕| 欧美成人网在线| 91精品国产自产91精品| 欧美激情免费看| 久久久精品999| 欧美精品免费在线| 久久免费少妇高潮久久精品99| 日韩免费观看在线观看| 久久久久免费视频| 日韩精品久久久久| 欧美一级视频在线观看| 性色av一区二区三区免费| 亚洲另类激情图| 国产69精品久久久久9999| 国产精品嫩草影院久久久| 日韩中文在线中文网在线观看| 日韩成人高清在线| 久久久国产91| 日韩精品中文字幕在线| 97涩涩爰在线观看亚洲| 欧美高清第一页| 一区二区三区动漫| 日韩av影片在线观看| 国产999精品久久久影片官网| 91欧美精品午夜性色福利在线| 97视频免费观看| 日日狠狠久久偷偷四色综合免费| 精品一区精品二区| 国产成人极品视频| 亚洲www在线观看| 成年无码av片在线| 亚洲欧美制服中文字幕| 欧美在线一级视频| 97av在线影院| 中文精品99久久国产香蕉| 国产精品久久视频| 88xx成人精品| 亚洲裸体xxxx| 成人亲热视频网站| 中文字幕欧美日韩va免费视频| 久久久亚洲国产天美传媒修理工| 久久精品国产一区二区电影| 97精品久久久中文字幕免费| 国产精品流白浆视频| 日韩av在线直播| 国产日韩欧美中文在线播放| 精品亚洲aⅴ在线观看| xxxx欧美18另类的高清| 欧美性猛交xxxx乱大交蜜桃| 97免费视频在线| 国外成人免费在线播放| 性色av一区二区三区| 亚洲伊人一本大道中文字幕| 日韩欧美精品网址| 日韩毛片在线观看| 国产精品直播网红| 久久97精品久久久久久久不卡| 欧美激情精品久久久久久久变态| 亚洲欧美激情四射在线日| 久久99热这里只有精品国产| 亚洲国产精品成人一区二区| 国产91精品久久久久久| 国产精品自产拍在线观| 欧美香蕉大胸在线视频观看| 日韩免费看的电影电视剧大全| 国语对白做受69| 色综合男人天堂| 亚洲综合日韩中文字幕v在线| 色七七影院综合|