awk学习实战-原创
生活随笔
收集整理的這篇文章主要介紹了
awk学习实战-原创
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
awk學習實戰 ? 1、實例1怎樣的shell才能使file1、file2兩個文件的$2不同的話,取出全局$0? 注意:比較兩個文件的$2的時候,一定要第一列相同的情況下才比較 1.1、操作文件 # cat file1 00001?????? 20 00002?????? 31 00003?????? 04 00004?????? 56 00005?????? 94 00006?????? 73 00007?????? 25 00008?????? 86 00009?????? 19 00010?????? 52 ? # cat file2 00001?????? 20 00007?????? 28 00002?????? 32 00004?????? 56 00010?????? 52 ? ?1.2 實現命令 # paste file1 file2|awk '{if(($1=$3)&&($2!=$4)) {print $0}}' 00007 31 00007 28 00002 04 00002 32 00010 94 00010 52 其它: ?#cat file1 file2|sort |uniq –u ? 三樓的答案是錯的,我要的結果是
00002 31 ?32
00007 25 ?28 sort file1 >f1;sort file2 >f2; join -j1 1 f1 f2|awk '$2 != $3' orsort file1 >f1;sort file2 >f2; join -1 1 -2 1 f1 f2|awk '$2 != $3' ? ? 2、實例2 #cat fawk.a 1?????? xiao ?????????????????25????? beijing??????? 9000 2?????? liuwenjing??? ?????????24????? beijing??????? 5000 3?????? weijianjun??????? ?????29????? shanghai????? 8000 4?????? wanmingyang? ????????28????? beijing??????? 5000 5?????? tianzhiyu??????? ??????25 ?????beijing??????? 5500 6?????? zhouhaoxing?????????? 23????? beijing??????? 5000 ? 2.1 顯示$2等xiao或$2等于liu的全行[root@store_2 awk]# awk '{ if(($2=="xiao")||($2=="liu")) print $0 }' fawk.a ?1?????? xiao????????????????? 25????? beijing??????? 9000 ? 2.3 顯示$2等xiao或$2包含liu的行 [root@store_2 awk]# awk '{ if(($2=="xiao")||($2~/liu/)) print $0 }' fawk.a ?1?????? xiao??????????????? ??25????? beijing??????? 9000 ?2?????? liuwenjing???? ????????24????? beijing??????? 5000 ? 2.3 計算共顯示了多少行NR [root@store_2 awk]# awk '{ print $0 } END { print "總行數:" NR }' fawk.a ?1?????? xiao????????????????? 25????? beijing??????? 9000 ?2?????? liuwenjing??????????? 24????? beijing????? ???5000 ?3?????? weijianjun??????????? 29????? shanghai?????? 8000 ?4?????? wanmingyang?????????? 28????? beijing????? ?5000 ?5?????? tianzhiyu ????????????25????? beijing??? ?????5500 ?6?????? zhouhaoxing?????????? 23????? beijing??????? 5000 總行數:6 2.4 顯示當前路徑的最后一個目錄名 echo $PWD | awk -F/ '{ print $NF}' echo $PWD | awk -F/ '{ print NF}' # 顯示列或域數目 echo $PWD | awk -F/ '{ print NF-1}' # 計算 2.4? 替換函數 # hehe替換xiao [root@store_2 awk]# awk 'gsub(/xiao/,"hehe")' fawk.a?? //$0 中,xiao替換liu ?1?????? hehe????????????????? 25????? beijing??????? 9000 同:sed 's/xiao/hehe/' fawk.a ,但顯示所有記錄 2.5 長度函數 [root@store_2 awk]# awk '{ print length($4) }' fawk.a 7 7 ….. 2.6 分割函數 split(s,a,t) //t為分隔標準,s為字符,a為數組,a[1],a[2].... ? 2.7 計算當然目錄下所有文件大小 2.7.1? 單命令 [root@store_2 awk]#? ll|awk '{total+=$5} { print $0} END { print total }' #可以加多個{} 總計 16 -rw-r--r-- 1 root root 354 10-29 01:55 fawk.a -rwxr-xr-x 1 root root? 61 10-29 04:34 it.awk 415 ? 2.7.2? 編程 [root@store_2 awk]# cat it.awk #!/bin/awk -f (total+=$5) END {print "總大小:" total } [root@store_2 awk]# ll|./it.awk -rw-r--r-- 1 root root 354 10-29 01:55 fawk.a -rwxr-xr-x 1 root root? 61 10-29 04:34 it.awk 總大小:415 ? 3 實例3 ??3.1 刪除所有空白行 將一個文件里所有的空白行刪除
? 3.2 輸出一個文件的偶數行
? 3.3 輸入范圍是1到100的七個隨機數
? 3.5 輸出本目錄下所有文件的字節數
? 3.6 顯示UID>500的用戶記錄 ?? [root@store_2 awk]# awk -F: '$3>500 { print $0}' /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin ?? ?也可以這樣寫: ? [root@store_2 awk]# awk -F: '{ if($3>500)? print $0 }' /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin [root@store_2 awk]# awk -F: '{ if($3>500)? {print $0} }' /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin ? ? ?以下為錯誤寫法: ? a、 [root@store_2 awk]# awk -F: '{ $3>500? print $0 }' /etc/passwd awk: { $3>500? print $0 } awk:?????????? ^ syntax error ??b、 awk -F: '{$3>500}? {print $0}' /etc/passwd ??? ???root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin ?????? 。。。。。。。。。
4 實例4
從 warn.a 文件中提取包含“WARNING”或”FATAL”,同時不包含“IGNOR”的行,然后,提取以“:”分割的第五個字段?
[root@store_2 awk]# cat warn.a
1111111111111:WARNING:3333 :4444:? 55551
2222222222222: FATAL:??? 3333 :4444:? 55552
3333333333333: IGNORE?? :3333 :4444:? 55553
# awk '{if(($0~/WARNING/)||($0~/FATAL/)) print $0}' warn.a |awk -F: '{print $5}'
? 55551
? 55552
? or
# grep -E "FATAL|WARNING" warn.a |awk -F: '{ print $5 }'
? 55551
? 55552
5 實例5
添加一個新組為class01,然后,添加屬于這個組的30個用戶,用戶名的形式為stdXX,其中,XX從 01到 30?
[root@store_2 awk]# cat users.sh
#!/bin/sh
groupadd class01
for((i=1;i<=9;i++))
do
? useradd -G class01 std0"$i"
? #userdel -r std0"$i"
done
for((i=10;i<=30;i++))
do
? useradd -G class01 std"$i"
? #userdel -r std$i
done
6 實例 6
在每個月的第一天備份并壓縮/etc目錄下的所有內容,存放在/root/backup目錄里,且文件名為如下形式yymmdd_etc,yy為年,mm為月,dd為日
#crontab? -e
輸入:
* * * 1 * tar -czf /tmp/$(date +%y%m%d)_etc1.tgz /etc > /dev/null 2>&1
* * * 1 * tar -czf /tmp/`date +%y%m%d`_etc.tgz /etc > /dev/null 2>&1
7 實例7
某系統管理員需要每天做一定的重復工作,編制一個解決方案:
(1).從下午 4:50 刪除/abc 目錄下的全部子目錄和全部文件;
(2).從早上 8:00~下午 6:00每小時讀取/xyz目錄下x1 文件中每行第一個域的全部數據加入到/backup目錄下的 back01.txt文件內;
(3).每逢周一下午 5:50 將/data目錄下的所有目錄和文件歸檔并壓縮為文件backup.tar.gz;
(4).在下午 5:55 將IDE接口的CD-ROM缷載(假設CD-ROM的設備名為 hdc);
(5).在早上 8:00 開機后啟動。
?? 答案:
(1)??? 4 * * *? rm –rf /abc/*
(2)??? * 08-18 * * * awk ‘{print $1}’ /xyz/x1 >> /backup/back01.txt
(3)??? 50? 17 * * 1 tar –czf backup.tar.gz /data >/dev/null 2>&1
(4)??? 55? 17 * * * umount /dev/hdc
(5)??? 設定BIOS每日上午 08:00開機。
?著作權歸作者所有:來自51CTO博客作者li_xiqing的原創作品,如需轉載,請注明出處,否則將追究法律責任 實例 職場 學習筆記 shell/python
00002 31 ?32
00007 25 ?28 sort file1 >f1;sort file2 >f2; join -j1 1 f1 f2|awk '$2 != $3' orsort file1 >f1;sort file2 >f2; join -1 1 -2 1 f1 f2|awk '$2 != $3' ? ? 2、實例2 #cat fawk.a 1?????? xiao ?????????????????25????? beijing??????? 9000 2?????? liuwenjing??? ?????????24????? beijing??????? 5000 3?????? weijianjun??????? ?????29????? shanghai????? 8000 4?????? wanmingyang? ????????28????? beijing??????? 5000 5?????? tianzhiyu??????? ??????25 ?????beijing??????? 5500 6?????? zhouhaoxing?????????? 23????? beijing??????? 5000 ? 2.1 顯示$2等xiao或$2等于liu的全行[root@store_2 awk]# awk '{ if(($2=="xiao")||($2=="liu")) print $0 }' fawk.a ?1?????? xiao????????????????? 25????? beijing??????? 9000 ? 2.3 顯示$2等xiao或$2包含liu的行 [root@store_2 awk]# awk '{ if(($2=="xiao")||($2~/liu/)) print $0 }' fawk.a ?1?????? xiao??????????????? ??25????? beijing??????? 9000 ?2?????? liuwenjing???? ????????24????? beijing??????? 5000 ? 2.3 計算共顯示了多少行NR [root@store_2 awk]# awk '{ print $0 } END { print "總行數:" NR }' fawk.a ?1?????? xiao????????????????? 25????? beijing??????? 9000 ?2?????? liuwenjing??????????? 24????? beijing????? ???5000 ?3?????? weijianjun??????????? 29????? shanghai?????? 8000 ?4?????? wanmingyang?????????? 28????? beijing????? ?5000 ?5?????? tianzhiyu ????????????25????? beijing??? ?????5500 ?6?????? zhouhaoxing?????????? 23????? beijing??????? 5000 總行數:6 2.4 顯示當前路徑的最后一個目錄名 echo $PWD | awk -F/ '{ print $NF}' echo $PWD | awk -F/ '{ print NF}' # 顯示列或域數目 echo $PWD | awk -F/ '{ print NF-1}' # 計算 2.4? 替換函數 # hehe替換xiao [root@store_2 awk]# awk 'gsub(/xiao/,"hehe")' fawk.a?? //$0 中,xiao替換liu ?1?????? hehe????????????????? 25????? beijing??????? 9000 同:sed 's/xiao/hehe/' fawk.a ,但顯示所有記錄 2.5 長度函數 [root@store_2 awk]# awk '{ print length($4) }' fawk.a 7 7 ….. 2.6 分割函數 split(s,a,t) //t為分隔標準,s為字符,a為數組,a[1],a[2].... ? 2.7 計算當然目錄下所有文件大小 2.7.1? 單命令 [root@store_2 awk]#? ll|awk '{total+=$5} { print $0} END { print total }' #可以加多個{} 總計 16 -rw-r--r-- 1 root root 354 10-29 01:55 fawk.a -rwxr-xr-x 1 root root? 61 10-29 04:34 it.awk 415 ? 2.7.2? 編程 [root@store_2 awk]# cat it.awk #!/bin/awk -f (total+=$5) END {print "總大小:" total } [root@store_2 awk]# ll|./it.awk -rw-r--r-- 1 root root 354 10-29 01:55 fawk.a -rwxr-xr-x 1 root root? 61 10-29 04:34 it.awk 總大小:415 ? 3 實例3 ??3.1 刪除所有空白行 將一個文件里所有的空白行刪除
| 代碼:: |
| $ awk 'NF>0' test1.dat one 123-321 234/22 a two 344-637 726/28 c three 273-287 287/97 d four 872-872 282/20 c |
| 代碼:: |
| $ awk 'NR %2 ==0' test1.dat two 344-637 726/28 c four 872-872 282/20 c |
? 3.3 輸入范圍是1到100的七個隨機數
| 代碼:: |
| $ awk 'BEGIN{for (i=1;i<7;i++) print int(101*rand())}' 24 29 85 15 59 19 |
? 3.5 輸出本目錄下所有文件的字節數
| 代碼:: |
| ]$ ls -l |awk '{x+=$5}; END{print x}' 15827 |
4 實例4
從 warn.a 文件中提取包含“WARNING”或”FATAL”,同時不包含“IGNOR”的行,然后,提取以“:”分割的第五個字段?
[root@store_2 awk]# cat warn.a
1111111111111:WARNING:3333 :4444:? 55551
2222222222222: FATAL:??? 3333 :4444:? 55552
3333333333333: IGNORE?? :3333 :4444:? 55553
# awk '{if(($0~/WARNING/)||($0~/FATAL/)) print $0}' warn.a |awk -F: '{print $5}'
? 55551
? 55552
? or
# grep -E "FATAL|WARNING" warn.a |awk -F: '{ print $5 }'
? 55551
? 55552
5 實例5
添加一個新組為class01,然后,添加屬于這個組的30個用戶,用戶名的形式為stdXX,其中,XX從 01到 30?
[root@store_2 awk]# cat users.sh
#!/bin/sh
groupadd class01
for((i=1;i<=9;i++))
do
? useradd -G class01 std0"$i"
? #userdel -r std0"$i"
done
for((i=10;i<=30;i++))
do
? useradd -G class01 std"$i"
? #userdel -r std$i
done
6 實例 6
在每個月的第一天備份并壓縮/etc目錄下的所有內容,存放在/root/backup目錄里,且文件名為如下形式yymmdd_etc,yy為年,mm為月,dd為日
#crontab? -e
輸入:
* * * 1 * tar -czf /tmp/$(date +%y%m%d)_etc1.tgz /etc > /dev/null 2>&1
* * * 1 * tar -czf /tmp/`date +%y%m%d`_etc.tgz /etc > /dev/null 2>&1
7 實例7
某系統管理員需要每天做一定的重復工作,編制一個解決方案:
(1).從下午 4:50 刪除/abc 目錄下的全部子目錄和全部文件;
(2).從早上 8:00~下午 6:00每小時讀取/xyz目錄下x1 文件中每行第一個域的全部數據加入到/backup目錄下的 back01.txt文件內;
(3).每逢周一下午 5:50 將/data目錄下的所有目錄和文件歸檔并壓縮為文件backup.tar.gz;
(4).在下午 5:55 將IDE接口的CD-ROM缷載(假設CD-ROM的設備名為 hdc);
(5).在早上 8:00 開機后啟動。
?? 答案:
(1)??? 4 * * *? rm –rf /abc/*
(2)??? * 08-18 * * * awk ‘{print $1}’ /xyz/x1 >> /backup/back01.txt
(3)??? 50? 17 * * 1 tar –czf backup.tar.gz /data >/dev/null 2>&1
(4)??? 55? 17 * * * umount /dev/hdc
(5)??? 設定BIOS每日上午 08:00開機。
?著作權歸作者所有:來自51CTO博客作者li_xiqing的原創作品,如需轉載,請注明出處,否則將追究法律責任 實例 職場 學習筆記 shell/python
0
微博 QQ 微信收藏
上一篇:老外眼中的簡單drbd配置 下一篇:join命令簡單例子 li_xiqing160篇文章,34W+人氣,0粉絲
關注轉載于:https://blog.51cto.com/cwind/676331
總結
以上是生活随笔為你收集整理的awk学习实战-原创的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线框图(demo草图)制作的总结
- 下一篇: 没有足够的权限删除OU