awk筆記備忘

awk pattern { action } {filenames}

# $0變量是指整條記錄,$1表示當前行的第一個域,$2表示當前行的第二個域,$n當前記錄的第n個域,字段間由FS分隔, 每行按 FS 字段分隔符(默認是空格或tab)
# cat 1.txt
Beth    4.00    0
Dan     3.75    0
kathy   4.00    10
Mark    5.00    20
Mary    5.50    22
Susie   4.25    18

# 輸出文本中的1、3列
 awk '{print $1,$3}’ 1.txt 

Beth 0
Dan 0
kathy 10
Mark 20
Mary 22
Susie 18

# $NF是number finally,表示最後一列的信息
awk '{print $NF}' 1.txt

0
0
10
20
22
18

# 篩選 第三列等於0的第一列的值
awk  '$3 == 0 {print $1}' 1.txt
Beth
Dan


# -F 指定輸入文件折分隔符
cat 2.txt
# 2.txt
Beth:4.00:0

awk -F ':' '{print $2}' 2.txt
4.00

# 打印出每行的行號NR代表行號
awk  '{print "我是行號",NR,$0}' 1.txt

我是行號 1 Beth 4.00    0
我是行號 2 Dan  3.75    0
我是行號 3 kathy        4.00    10
我是行號 4 Mark 5.00    20
我是行號 5 Mary 5.50    22
我是行號 6 Susie        4.25    18

# BEGIN 和 END  
# BEGIN 用於匹配第一個輸入文件的第一行之前的位置, END 則用於匹配處理過的最後一個文# 件的最後一行之後的位置
awk 'BEGIN { print "標題一標題二 標題三"; print "-------------------"} { print}' 1.txt

標題一標題二 標題三
-------------------
Beth    4.00    0
Dan     3.75    0
kathy   4.00    10
Mark    5.00    20
Mary    5.50    22
Susie   4.25    18

# 打印最後一行 等同於  tail -n 1 1.txt  等同於  sed -n '$p' 1.txt

awk 'END { print $0}' 1.txt

Susie   4.25    18

# 設置變量
awk '{tail=($1 "~~~~~")} {print tail}' 1.txt

Beth~~~~~
Dan~~~~~
kathy~~~~~
Mark~~~~~
Mary~~~~~
Susie~~~~~

# for循環 每行打印2遍
awk '{for(i=0; i < 2; i++) print $0}' 1.txt

Beth    4.00    0
Beth    4.00    0
Dan     3.75    0
Dan     3.75    0
kathy   4.00    10
kathy   4.00    10
Mark    5.00    20
Mark    5.00    20
Mary    5.50    22
Mary    5.50    22
Susie   4.25    18
Susie   4.25    18

# 逆序打印
awk '{arr[NR] = $0 }END{for(i = NR;i >0;i --) print arr[i]}' 1.txt

Susie   4.25    18
Mary    5.50    22
Mark    5.00    20
kathy   4.00    10
Dan     3.75    0
Beth    4.00    0

# 去重複行
awk '!($0 in x){x[$0];print $0 }' 1.txt

# 其他:
https://www.gnu.org/software/gawk/manual/gawk.html#Advanced-Features

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章