婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > linux awk 多文件操作2種實現方法

linux awk 多文件操作2種實現方法

熱門標簽:新科火車站地圖標注點 地圖標注的牌子 制作地圖標注 外呼系統鏈接 商店地圖標注外賣入駐 磁力導航地圖標注 桂林市ai電銷機器人公司 外呼系統怎么弄 地址高德地圖標注

我們經常會將2個有關聯文本文件進行合并處理。分別從不同文件獲取需要的列,然后,整體輸出到一起。awk進行多文件處理時候,常常會遇到2個方面問題,第一個是怎么樣合并多個文件為一個文件。第二個問題就是怎么樣將多行合并為一行顯示。我這里說下我的處理2種方法,還有實現思路。

實例文本:


復制代碼
代碼如下:

[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

需要合并得到結果:

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

awk多文件操作方法一:

實現思路:

通過外部命令合并文件,然后通過排序,然后通過awk進行合并操作。

首先:


復制代碼
代碼如下:

[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

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

繼續:


復制代碼
代碼如下:

[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

需要把幾行合并,經常用到方法是:NR%num 然后將行值保存下來,next該行。在輸出時候打印出來。

awk多文件操作方法二

實現思路

不借助第3放工具打開,直接通過awk 打開多個文件。然后可以通過:FILENAME獲得當前處理文件名。NR總記錄 FNR當前文件記錄,以及ARGC傳入參數總數,ARGV是數組,各個參數值。

看下這些實例:


復制代碼
代碼如下:

[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

程序代碼:


復制代碼
代碼如下:

[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

代碼說明:

這里用到2維數組,aData[文件名,關聯列對應值] ,這種方法可以將多個文件內容。放入一個統一二維數組。然后循環數組,通過if((i,j} in array) 查找對應列值,在其它文件中是否存在。

以上是2種實現方法,其中第一種思路較為簡單,很容易理解。第二種處理起來較為復雜。有更好方法大家給我分享。

標簽:仙桃 衡陽 衡陽 三門峽 湘西 慶陽 茂名 六盤水

巨人網絡通訊聲明:本文標題《linux awk 多文件操作2種實現方法》,本文關鍵詞  linux,awk,多,文件,操作,2種,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《linux awk 多文件操作2種實現方法》相關的同類信息!
  • 本頁收集關于linux awk 多文件操作2種實現方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 乐亭县| 池州市| 衡山县| 进贤县| 漳州市| 苍梧县| 新乐市| 泰和县| 临泉县| 隆昌县| 永嘉县| 娄烦县| 班戈县| 大新县| 呼和浩特市| 成都市| 阜康市| 山西省| 江陵县| 岚皋县| 观塘区| 义马市| 镇江市| 潢川县| 平罗县| 都匀市| 贡觉县| 息烽县| 华池县| 新竹市| 永昌县| 乌兰浩特市| 溧水县| 宾阳县| 高邑县| 板桥市| 板桥市| 福州市| 西安市| 醴陵市| 道孚县|