awk命令扩展使用操作
2019獨角獸企業重金招聘Python工程師標準>>>
awk 中使用外部shell變量
示例1
[root@centos01 t1022]# A=888 [root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}' 888 [root@centos01 t1022]# echo "aaaaaaaaaaaaa" | awk -v GET_A=$A '{print GET_A}' 888說明:-v選項用于定義參數,這里表示將變量A的值賦予GET_A。有多少個變量需要賦值,就需要多少個-v選項。前面的echo "string"是awk運行需要的參數
示例2
[root@centos01 t1022]# cat test.txt 1111111:13443253456 2222222:13211222122 1111111:13643543544 3333333:12341243123 2222222:12123123123 [root@centos01 t1022]# cat 1.sh #!/bin/bash sort -n test.txt | awk -F ':' '{print $1}' | uniq > t.txt for id in `cat t.txt`;doecho "[$id]"awk -v get_id=$id -F ':' '$1==get_id {print $2}' test.txt# 或者 awk -F ':' '$1=="'$id'" {print $2}' test.txt done[root@centos01 t1022]# bash 1.sh [1111111] 13443253456 13643543544 [2222222] 13211222122 12123123123 [3333333] 12341243123awk 合并文件
[root@centos01 t1022]# cat p1.txt 1 aa 2 bb 3 ee 4 ss [root@centos01 t1022]# cat p2.txt 1 ab 2 cd 3 ad 4 bd 5 de [root@centos01 t1022]# awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' p1.txt p2.txt 1 ab aa 2 cd bb 3 ad ee 4 bd ss 5 de說明: NR表示讀取的行數, FNR表示讀取的當前行數。 所以NR==FNR 就表示讀取p1.txt的時候。 同理NR>FNR表示讀取p2.txt的時候
把一個文件多行連接成一行
[root@centos01 t1022]# cat p1.txt 1 2 3 4 [root@centos01 t1022]# f=`cat p1.txt`;echo $f 1 2 3 4 [root@centos01 t1022]# awk '{printf("%s",$0)}' p1.txt 1 2 3 4 [root@centos01 t1022]# # 打印后沒有換行,交互不是特別好,加echo處理 [root@centos01 t1022]# awk '{printf("%s",$0)}' p1.txt;echo 1 2 3 4 [root@centos01 t1022]# paste -s -d '' p1.txt 1 2 3 4 [root@centos01 t1022]# cat p1.txt |xargs 1 2 3 4[root@centos01 t1022]# cat p1.txt|xargs|sed 's/ /+/g' 1+2+3+4擴展:
- gdb安裝 yum install -y gdb
- gdb當計算器使用
awk中gsub函數的使用
# 把test01.txt文件中的所有root替換為ABC打印出來 [root@centos01 t1022]# cat test01.txt 0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin [root@centos01 t1022]# [root@centos01 t1022]# awk 'gsub(/root/, "ABC")' test01.txt 0:0:ABC:/ABC:/bin/bash operator:x:11:0:operator:/ABC:/sbin/nologin# 替換每行第一次出現的root為ABC [root@centos01 t1022]# awk 'sub(/root/, "ABC")' test01.txt 0:0:ABC:/root:/bin/bash operator:x:11:0:operator:/ABC:/sbin/nologin# 替換$3中的root為ABC打印出來 [root@centos01 t1022]# awk -F ':' 'gsub(/root/, "ABC", $3) {print $0}' test01.txt 0 0 ABC /root /bin/bashawk 截取指定多個域為一行
[root@centos01 t1022]# cat test01.txt 0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin[root@centos01 t1022]# cat 2.sh for i in `seq 1 10` doawk -F ':' -v a=$i '{$a;printf $a ""}' test01.txtecho done[root@centos01 t1022]# bash 2.sh 0bindaemonadmlpsyncshutdownhaltmailoperator 0xxxxxxxxx root1234567811 /root1247000120 /bin/bashbindaemonadmlpsyncshutdownhaltmailoperator /bin/sbin/var/adm/var/spool/lpd/sbin/sbin/sbin/var/spool/mail/root /sbin/nologin/sbin/nologin/sbin/nologin/sbin/nologin/bin/sync/sbin/shutdown/sbin/halt/sbin/nologin/sbin/nologingrep 或 egrep 或awk 過濾兩個或多個關鍵詞
- grep -E '123|abc' filename # 找出文件(filename)中包含123或者包含abc的行
- egrep '123|abc' filename # 用egrep同樣可以實現
- awk '/123|abc/' filename # awk 的實現方式
awk編寫生成以下結構文件
用awk編寫生成以下結構文件的程序。( 最后列使用現在的時間,時間格式為YYYYMMDDHHMISS) 各列的值應如下所示,每增加一行便加1,共500萬行。
1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,2005100110101 2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,2005100110101
awk 打印單引號
awk 'BEGIN{print "a'"'"'s"}' # 不用脫義,就多寫幾個單引號、雙引號
awk 'BEGIN{print "a'''s"}' # 用脫義,脫義的是單引號
awk 'BEGIN{print "a"s"}' # 用脫義,脫義的是雙引號
[root@centos01 t1022]# awk 'BEGIN{print "a'"'"'s"}' a's轉載于:https://my.oschina.net/u/996931/blog/2250974
總結
以上是生活随笔為你收集整理的awk命令扩展使用操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql server 计算两个时间 相差
- 下一篇: 关于PID的如何修改的FAQ