校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > linux awk 多文件操作2種實(shí)現(xiàn)方法

linux awk 多文件操作2種實(shí)現(xiàn)方法

熱門標(biāo)簽:新科火車站地圖標(biāo)注點(diǎn) 地圖標(biāo)注的牌子 制作地圖標(biāo)注 外呼系統(tǒng)鏈接 商店地圖標(biāo)注外賣入駐 磁力導(dǎo)航地圖標(biāo)注 桂林市ai電銷機(jī)器人公司 外呼系統(tǒng)怎么弄 地址高德地圖標(biāo)注

我們經(jīng)常會(huì)將2個(gè)有關(guān)聯(lián)文本文件進(jìn)行合并處理。分別從不同文件獲取需要的列,然后,整體輸出到一起。awk進(jìn)行多文件處理時(shí)候,常常會(huì)遇到2個(gè)方面問(wèn)題,第一個(gè)是怎么樣合并多個(gè)文件為一個(gè)文件。第二個(gè)問(wèn)題就是怎么樣將多行合并為一行顯示。我這里說(shuō)下我的處理2種方法,還有實(shí)現(xiàn)思路。

實(shí)例文本:


復(fù)制代碼
代碼如下:

[chengmo@centos5 shell]$ awk 'FNR==1{print "\r\n"FILENAME}{print $0}' a.txt b.txt

a.txt
100 wang man
200 wangsan woman
300 wangming man
400 wangzheng man

b.txt
100 90 80
200 80 70
300 60 50
400 70 20

需要合并得到結(jié)果:

100     wang    man 90  80
200 wangsan woman 80    70
300 wangming man 60     50
400 wangzheng man 70    20

awk多文件操作方法一:

實(shí)現(xiàn)思路:

通過(guò)外部命令合并文件,然后通過(guò)排序,然后通過(guò)awk進(jìn)行合并操作。

首先:


復(fù)制代碼
代碼如下:

[chengmo@centos5 shell]$ cat a.txt b.txt | sort -n -k1 |awk '{print}'
100 90 80
100 wang man
200 80 70
200 wangsan woman
300 60 50
300 wangming man
400 70 20
400 wangzheng man

現(xiàn)在需要把:第一列相同的處理合并到一行,這里需要用“next”語(yǔ)句。它操作,可以參考awk 多行合并【next 使用介紹】(常見應(yīng)用4)

繼續(xù):


復(fù)制代碼
代碼如下:

[chengmo@centos5 shell]$ cat a.txt b.txt | sort -n -k1 |awk 'NR%2==1{fd1=$2"\t"$3;next}{print $0"\t"fd1}'
100 wang man 90 80
200 wangsan woman 80 70
300 wangming man 60 50
400 wangzheng man 70 20

需要把幾行合并,經(jīng)常用到方法是:NR%num 然后將行值保存下來(lái),next該行。在輸出時(shí)候打印出來(lái)。

awk多文件操作方法二

實(shí)現(xiàn)思路

不借助第3放工具打開,直接通過(guò)awk 打開多個(gè)文件。然后可以通過(guò):FILENAME獲得當(dāng)前處理文件名。NR總記錄 FNR當(dāng)前文件記錄,以及ARGC傳入?yún)?shù)總數(shù),ARGV是數(shù)組,各個(gè)參數(shù)值。

看下這些實(shí)例:


復(fù)制代碼
代碼如下:

[chengmo@centos5 shell]$ awk 'BEGIN{print ARGC,ARGV[0],ARGV[1],ARGV[2]}{print FILENAME,NR,FNR,$0}' a.txt b.txt
3 awk a.txt b.txt
a.txt 1 1 100 wang man
a.txt 2 2 200 wangsan woman
a.txt 3 3 300 wangming man
a.txt 4 4 400 wangzheng man
b.txt 5 1 100 90 80
b.txt 6 2 200 80 70
b.txt 7 3 300 60 50
b.txt 8 4 400 70 20

程序代碼:


復(fù)制代碼
代碼如下:

[chengmo@centos5 shell]$ awk '
BEGIN{
if(ARGC3)
{
exit 1;
}

file="";
}
{
aData[FILENAME,$1]=ARGV[1]==FILENAME?$0:$2"\t"$3;
}
END{
for(k in aData)
{
split(k,idx,SUBSEP);
if(idx[1]==ARGV[1] (ARGV[2],idx[2]) in aData)
{
print aData[ARGV[1],idx[2]],aData[ARGV[2],idx[2]] | "sort -n -k1";
}
}
}' a.txt b.txt

100 wang man 90 80
200 wangsan woman 80 70
300 wangming man 60 50
400 wangzheng man 70 20

代碼說(shuō)明:

這里用到2維數(shù)組,aData[文件名,關(guān)聯(lián)列對(duì)應(yīng)值] ,這種方法可以將多個(gè)文件內(nèi)容。放入一個(gè)統(tǒng)一二維數(shù)組。然后循環(huán)數(shù)組,通過(guò)if((i,j} in array) 查找對(duì)應(yīng)列值,在其它文件中是否存在。

以上是2種實(shí)現(xiàn)方法,其中第一種思路較為簡(jiǎn)單,很容易理解。第二種處理起來(lái)較為復(fù)雜。有更好方法大家給我分享。

標(biāo)簽:仙桃 衡陽(yáng) 衡陽(yáng) 三門峽 湘西 慶陽(yáng) 茂名 六盤水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《linux awk 多文件操作2種實(shí)現(xiàn)方法》,本文關(guān)鍵詞  linux,awk,多,文件,操作,2種,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux awk 多文件操作2種實(shí)現(xiàn)方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于linux awk 多文件操作2種實(shí)現(xiàn)方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 瑞丽市| 石泉县| 灯塔市| 宜兰市| 民勤县| 郑州市| 河北区| 崇礼县| 宣恩县| 伊春市| 洪泽县| 江达县| 济源市| 潢川县| 自治县| 明溪县| 布尔津县| 巴彦淖尔市| 蛟河市| 卫辉市| 鹿泉市| 凌海市| 龙泉市| 交城县| 时尚| 宁都县| 万山特区| 凌云县| 信宜市| 泽库县| 灵丘县| 安溪县| 大港区| 咸宁市| 闵行区| 石河子市| 宁晋县| 库尔勒市| 朝阳县| 深圳市| 南康市|