1、使用shell變數
cat filename
1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123
使用awk設定為:
[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123
[root@centos7 shell]# sort -n filename |awk -f ':' ''|uniq > id.txt
[root@centos7 shell]# for id in `cat id.txt`;do echo "[$id]"; awk -v id2="$id" -f ':' '$1==id2 ' filename ; done
總結:awk -v 指將$id的值設定為id2
2、我有這樣的需求,需要把兩個檔案中,第一列相同的行合併到同一行中。舉個例子,有兩個檔案,內容如下
cat 1.txt
1 linux
2 os
3 op
4 se
cat 2.txt
1 dba
2 opm
3 pc
4 de
5 df
合併後的結果為:
1 linux dba
2 os opm
3 op pc
awk 'nr==fnrnr>fnr' 1.txt 2.txt
解釋:nr表示行號,fnr也表示行號;區別是讀乙個文字檔案都是一樣的,當讀第二個文字檔案時nr就繼續累積,而fnr就清空之前的,變為了從1開始讀取。
當nr==fnr時就是讀取的1.txt,a[$1]表示乙個陣列,$2就是linux、os這些。當nr>fnr時將讀取第二個檔案2.txt,這時,print $0就是讀取的第二個檔案的內容,第三列就是指的a[$1]就是在1.txt中定義的$2的值
3、將乙個檔案多行寫成一行
第一種:a=`cat file`;echo $a
第二種:cat file|xargs
4、gsub函式使用
awk 'gsub(/www/,"abc")' /etc/passwd // passwd檔案中把所有www替換為abc
awk -f ':' 'gsub(/www/,"abc",$1) ' /etc/passwd // 替換$1中的www為abc
5、查詢多行
grep -e '123|abc' filename // 找出檔案(filename)中包含123或者包含abc的行
egrep '123|abc' filename //用egrep同樣可以實現
awk '/123|abc/' filename // awk 的實現方式
6、paste 用法
paste filename1 filename2
這樣就可以實現了。舉個例子。
cat a.txt
1 2 3
4 5 6
a b c
cat b.txt
3 2 1
6 5 4
c b a
則 paste a.txt b.txt 結果為
1 2 3 3 2 1
4 5 6 6 5 4
a b c c b a
如果,你想在兩個檔案連線處用乙個指定的字元連線,還可以用-d來指定
paste -d '+' a.txt b.txt
結果為1 2 3+3 2 1
4 5 6+6 5 4
a b c+c b a
7、nf:域數,nr:當前行數
[root@test shell]# awk -f ':' '' /etc/passwd
1 $7=/bin/bash
2 $7=/sbin/nologin
3 $7=/sbin/nologin
4 $7=/sbin/nologin
5 $7=/sbin/nologin
6 $7=/bin/sync
8、查詢多個
grep -e '123|abc' filename // 找出檔案(filename)中包含123或者包含abc的行
egrep '123|abc' filename //用egrep同樣可以實現
awk '/123|abc/' filename // awk 的實現方式
awk命令擴充套件
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 u...
awk鞏固擴充套件
選項 v可以實現使用外部變數。如 a 44echo abcd awk v get a a 說明 v選項用於定義引數,這裡表示將變數a的值賦予get a。如果有多個變數需要賦值,就需要多個 v選項。需求 把兩個檔案中,第一列相同的行合併到同一行中。舉個例子,有兩個檔案,內容如下 cat 1.txt 1...
awk備忘,強大的awk
越來越發現awk的強大,做了實驗,做了總結 備忘!在linux shell中呼叫awk awk x x即為awk命令,命令必須包含在單引號中,至少雙引號都不行 方法一 awk f nr 7,nr 15 方法二 awk nr 7,nr 15 設定awk分隔符 nf 顯示域的個數 不是分隔符數,一般應該...