awk實際應用 文字合併

2021-09-21 09:00:00 字數 2679 閱讀 1273

請使用awk命令將如下兩份檔案中名字相同的兩行合併起來1

2

3

4

5

6

7

8

9

10

[root@localhost ~]# cat 1.txt

韓海林 21歲

海林韓 23歲

韓林海 22歲

林海韓 24歲

[root@localhost ~]# cat 2.txt

韓林海 男

海林韓 男

韓海林 男

林海韓 男

輸出效果:

韓海林 21歲 男  1

2

3

4

5

[root@localhost ~]# awk 'nr==fnrnr>fnr' 2.txt  1.txt

韓海林 21歲 男

海林韓 23歲 男

韓林海 22歲 男

林海韓 24歲 男

1

2

3

4

5

6

[root@localhost~]# awk 'nr==fnrnr>fnr' 2.txt  1.txt > 3.txt

[root@localhost ~]# cat 3.txt

韓海林 21歲 男

海林韓 23歲 男

韓林海 22歲 男

林海韓 24歲 男

解釋:在awk裡,nr和fnr的含義相近,唯一的區別就是作用範圍,nr是所有讀取的行資訊計數,而fnr是正在讀取檔案的行資訊計數,fnr在檔案切換時會從0重新開始計數,所以上述語句的意思是:

nr==fnr   nr最大值為4,fnr值為1-4,以2.txt的第乙個資料項為key,$2即第2列為資料組成陣列; 

nr>fnr   此時nr=(2.txt的總行數+fnr),nr最大值為8,fnr則重新從1-4計數,判斷第乙個資料項在不在2.txt資料組成的陣列裡,如果在,則列印本行加陣列項。

nr是英文number of record的簡寫,就是awk每從檔案或輸入流中讀入一行資料,就把這個變數加一。這個是awk自帶的變數。

其他的解釋:

nr==fnr

開啟第乙個檔案2.txt,把檔案裡面的$2列的內容存入到a[$1]這個陣列。

nr>fnr

然後開啟第二個檔案,列印1.txt一行內容,然後列印第乙個檔案a[$1]陣列的內容。

加入if判斷,更容易理解,上面的命令省略了;判斷1.txt的第一列內容在a陣列裡面,列印整行內容和a[$1]陣列內容;

1

2

3

4

5

[root@localhost ~]# awk 'nr==fnrnr>fnr' 2.txt 1.txt

韓海林 21歲 男

海林韓 23歲 男

韓林海 22歲 男

林海韓 24歲 男

檔案順序不同,結果也不同; 1

2

3

4

5

[root@localhost ~]# awk 'nr==fnrnr>fnr' 1.txt 2.txt

韓林海 男 22歲

海林韓 男 23歲

韓海林 男 21歲

林海韓 男 24歲

2 2 循壞結構及其應用文字輸入

設計迴圈時的幾條指導原則 1 指定迴圈終止條件 2 在首次測試前初始化條件 3 在條件被再次測試之前更新條件 c 允許在for迴圈初始化部分中宣告和初始化變數,c不允許,這種變數離開迴圈後就會消失。include string word cin word for int i word.size 1 ...

time庫的簡單應用 文字進度條

執行效果如圖 文字進度條.py by dingzeyuan import time as t scale 10print 執行開始 for i in range scale 1 a i b scale i c i scale 100 print format c,a,b t.sleep 0.1 pr...

awk語法與文字應用處理

awk命令的一般形式 awk begin pattern1 pattern2 patternn end input filename 其中,begin 和 end 是可選的。awk的執行過程如下 1,如果存在begin,awk首先執行它指定的actions。2,awk從輸入中讀取一行,稱為一條輸入記...