awk擴充套件

2021-09-21 05:08:55 字數 2326 閱讀 8845

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 顯示域的個數 不是分隔符數,一般應該...