日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join

發布時間:2025/4/5 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Shell中的awk命令是非常強大的,有很多書籍專門介紹awk的。本文介紹的只是其中很小的一個點,使用awk命令完成兩個文件的關聯join。

先看看awk中的兩個自身變量,NR和FNR。 awk可以指定同時讀取多個文件,按照指定的先后順序,逐個讀取。

NR指的是awk所讀取到所有記錄(包括多個文件)的行數索引號,大概是Number Of Record的意思。

FNR只的是awk所讀取到的每個文件中的行數索引號,當文件發生切換時候,FNR重新從1開始,大概是File Number Of Record的意思。

有兩個簡單的文件:

[liuxiaowen@getway?tmp]$?cat?a.txt?1,a-12,a-23,a-34,a-4[liuxiaowen@getway?tmp]$?cat?b.txt?2,b-24,b-45,b-5

上面第一個命令中,awk只讀取一個文件,因此NR和FNR是一樣的;

第二個命令有兩個文件,從NR=5開始讀取第二個文件b.txt。

由這點可以得出一個規則:當NR==FNR時候,讀取到的內容為第一個文件的內容,當NR!=FNR時候,讀取到的內容是第二個文件的。

看下面的命令:

[liuxiaowen@getway?tmp]$?awk?-F','?'NR==FNR{a[$1]=$2;}NR!=FNR{print?$0,a[$1]}'?b.txt?a.txt?1,a-1?2,a-2?b-23,a-3?4,a-4?b-4

從輸出的結果來看,已經將兩個文件通過第一列的值join起來,準確的說是a.txt left outer join b.txt.

解釋一下這個命令:

第一部分:

NR==FNR{a[$1]=$2;}

a是一個數組;當NR==FNR,也就是讀取第一個文件的內容(第一個文件就是后面的b.txt),以b.txt中的$1作為數組索引號,以b.txt中的$2作為數組的值;

因此,第一部分過后,有了一個數組a,具體的值為 a[2]=”b-2″, a[4]=”b-4″, a[5]=”b-5″

再看第二部分:

NR!=FNR{print?$0,a[$1]}

當NR!=FNR時候,也就是讀取第二個文件的內容(a.txt),print $0(打印a.txt中的內容),以及a[$1],這里的含義是以a.txt中的$1為索引號,去數組a中獲取值,因為之前數組a中的索引號有2,4,5;因此a.txt中第一列為2和4的記錄從數組a中獲取到了值,1,3,5在數組a中不存在。

如果是將兩個文件做內關聯:

[liuxiaowen@getway?tmp]$?awk?-F','?'NR==FNR{a[$1]=$2;}NR!=FNR?&&?a[$1]?{print?$0,a[$1]}'?b.txt?a.txt??2,a-2?b-24,a-4?b-4

變了一個條件:NR!=FNR && a[$1]

讀取第二個文件的內容,并且第二個文件的$1在數組中存在,也可以寫成 $1 in a

[liuxiaowen@getway?tmp]$?awk?-F','?'NR==FNR{a[$1]=$2;}NR!=FNR?&&?$1?in?a?{print?$0,a[$1]}'?b.txt?a.txt??????2,a-2?b-24,a-4?b-4

總結

以上是生活随笔為你收集整理的shell中join链接多个域_Linux Shell中使用awk完成两个文件的关联Join的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。