Linux下awk 将多个文件的结果列合并到一个文件 在使用NS 进行模拟结果数据处理的时候,往往需要对多组参数的结果进行比较来鉴别性能的优劣,这里编写了一个使用awk 将多个同类型结果文件进行合并操作的脚本。如,NS 模拟结果中,经常出现多个网络参数(协议类型、误码率、带宽、背景流、时延等)取不同值条件下进行一些网络指标(RTT,cwnd,吞吐量、网络利用率、公平性等)统计,这时会产生 N多组实验结果,怎样对这么多组结果中的单个指标(常见的吞吐量)进行比较,如果使用手工粘贴到excel 再进行绘图就显得任务量很大,显得人脑子比较笨(当然,最优秀的程序员永远是最懒的,我恰巧也是其中之一)。 小 提 示 : 为 了 方 便 NS 模 拟 结 果 直 接 在 excel 里 面 打 开 , 建 议 结 果 数 据 以 文 本 形 式 ( .txt,.dat)保存,各 数 据 列 之 间 用 制 表 符 \t( excel 默 认 分 隔 符 ),这 样 在 文 件 上 右 键 -》Excel 打 开 即 可 ,而 不 用 在 excel里 面 使 用 数 据 导 入 向 导 设 置 分 隔 符 这 么 麻 烦 。 一 切 以 提 高 生 产 效 率 和 生 活 质 量 为 根 本 出 发 点 O(∩ _∩ )O~。 这里给出一个awk 脚本来实现上面的问题。 test.awk: #!/usr/bin/awk -f BEGIN { #print ARGC; Index[ARGC];#记录各个文件的行下标 for(t=1;t<=ARGC;t++) { Index[t]=0; } } { #文件数ARGC-1,第一个参数是应用程序名 awk. for(t=1;t<=ARGC;t++) { if(FILENAME==ARGV[t]) { line[t,Index[t]]=$0;#$0=整行,前提是各个文件行列之间已经被\t 制表符分隔。 #line[t,Index[t]]=sprintf("%s\t%s",$1,$2);#如果固定为几列,也可以用这个。 Index[t]++; } } } END { maxcount=0; for(i=1;i<=ARGC;i++) { if(Index[i]>maxcount) maxcount=Index[i]; } #printf("maxcount:%d",maxcount); for(j=0;j out.txt Rtt1.txt: Rtt.txt: Rtt2.txt: 合并结果 out.txt: 在excel 里面打开结果:(out.txt 右键->excel打开) 将rtt1.txt rtt.txt rtt2.txt out.txt 文件合并, awk -f test.awk rtt1.txt rtt.txt rtt2.txt out.txt > out2.txt 结果 out2.txt: Excel 中打开 out2.txt