awk 中使用外部shell變數
測試檔案awk.txt
及格:張三:67
不及格:李四:58
及格:小明:72
優秀:小虎:95
不及格:小蘭:49
編寫指令碼awk1.sh:
#!/bin/bash
sort -n awk.txt|awk -f ":"
''|uniq >考試.txt
sort awk.txt|awk -f ":"
''|uniq -c >123.txt
for a in `cat 考試.txt`;do
echo
"[$a
]":`awk -v c=$a
'$2==c ' 123.txt`人
awk -v b=$a -f ":"
' $1==b ' awk.txt
done
[root@localhost test]# sh
awk1
.sh[不及格]
:2人李四:58
小蘭:49
[及格]
:2人張三:67
小明:72
[優秀]
:1人小虎:95
awk 合併乙個檔案 我有這樣的需求,需要把兩個檔案中,第一列相同的行合併到同一行中。舉個例子,有兩個檔案,內容如下
[root@localhost awk]
#cat 1.txt
1 aa
2 bb
3 ee
4 ss
[root@localhost awk]
#cat 2.txt
1 ab
2 cd
3 ad
4 bd
5 de
[root@localhost awk]# awk 'nr==fnrnr>fnr' 1.txt 2.txt
1 ab aa
2 cd bb
3 ad ee
4 bd ss
5 de
把乙個檔案多行連線成一行 例子:
[root@localhost awk]
#cat 2.txt
1 ab
2 cd
3 ad
4 bd
5 de
print和printf的區別
[root@localhost awk]# awk '' 2.txt12
345[root@localhost awk]# awk '' 2.txt
12345[root@localhost awk]# ^c
echo "" 的作用是換行
[root@localhost awk]# awk ''
2.txt; echo""
12345
[root@localhost awk]# awk '' 2.txt;echo
""1+2+3+4+5+
我們可以用sed來實現這個需求
[root@localhost awk]# cat 2.txt|awk ''|xargs|sed -r 's/ /+/'g
1+2+3+4+5
awk中gsub函式的使用
gsub和sed中替換功能差不多
使用gsub
[root@localhost awk]# cat 1.txt
1 aa
2 bb
3 ee
4 ss
[root@localhost awk]# awk 'gsub(/[0-9]/,"abc")' 1.txt
abc aa
abc bb
abc ee
abc ss
使用sed替換
[root@localhost awk]# sed 's/[0-9]/abc/g' 1.txt
abc aa
abc bb
abc ee
abc ss
awk 'gsub(/[0-9]/,"abc",$1) ' 1.txt // 替換$1中的數字為abc
[root@localhost awk]# awk 'gsub(/[0
-9]/,"abc",$1) ' 1.txt
abc aa
abc bb
abc ee
abc ss
awk擴充套件
1 使用shell變數 cat filename 1111111 13443253456 2222222 13211222122 1111111 13643543544 3333333 12341243123 2222222 12123123123 使用awk設定為 1111111 13443253...
awk鞏固擴充套件
選項 v可以實現使用外部變數。如 a 44echo abcd awk v get a a 說明 v選項用於定義引數,這裡表示將變數a的值賦予get a。如果有多個變數需要賦值,就需要多個 v選項。需求 把兩個檔案中,第一列相同的行合併到同一行中。舉個例子,有兩個檔案,內容如下 cat 1.txt 1...
awk命令詳解
本文編輯整理自 一 前言 awk有3個不同版本 awk nawk和gawk,未作特別說明,一般指gawk。awk語言的最基本功能是在檔案或字串中基於指定規則來分解抽取資訊,也可以基於指定的規則來輸出資料。完整的awk指令碼通常用來格式化文字檔案中的資訊。二 基本語法 awk opion awk sc...