用awk 写个脚本,比较三个文件,只要两个不同就打印出来,要求如下:
file1:cpucore0:2010/09/10aaa0x0011111112010/09/10aaa0x0022222222010/09/10aaa0x0033333...
file1:
cpu core 0:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
cpu core 1:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
file2:
cpu core 0:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
cpu core 1:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333334
file3:
cpu core 0:
2010/09/10 aaa 0x001 111112
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
cpu core 1:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
输出格式为:
core 0:
aaa 0x001 file1 111111 file2 111111 file3 111112
core 1:
aaa 0x003 file1 333333 file2 333334 file3 333333 展开
cpu core 0:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
cpu core 1:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
file2:
cpu core 0:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
cpu core 1:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333334
file3:
cpu core 0:
2010/09/10 aaa 0x001 111112
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
cpu core 1:
2010/09/10 aaa 0x001 111111
2010/09/10 aaa 0x002 222222
2010/09/10 aaa 0x003 333333
输出格式为:
core 0:
aaa 0x001 file1 111111 file2 111111 file3 111112
core 1:
aaa 0x003 file1 333333 file2 333334 file3 333333 展开
1个回答
展开全部
OK,我这里要对你的题目进行一些假设,如果假设的不对,请你再追问,好吗?
假设1:每个文件中的日期:2010/09/10总是相同的,或者即使不同也不影响输出。
假设2:每个文件的第二列:aaa总是相同的,或者即使不同也不影响输出。
假设3:每个文件只有在第三列:0x00X相同时,才比较后面的五位数字。如果不同,则依据你给定的格式输出。
假设4:每个文件core0下的行数均相同,core1下的行数叶相同。
假设5:每个文件的core0与core1分别对待
程序如下
BEGIN {i=1;}
{if(curfn != FILENAME)
{curfn = FILENAME;files[i]=curfn;i++;j=1;}
}
{if($1=="cpu")
{curcore=$3;curcores[j] = $3;j++;k=1;}
else
{lines[curcore,k]=$3;array[curfn,curcore,$3]=$4;k++;}
}
END {
for(var in lines){
split(var,headers,SUBSEP);
if(!((array[files[1],headers[1],lines[var]]==\
array[files[2],headers[1],lines[var]])&&\
(array[files[2],headers[1],lines[var]]==\
array[files[3],headers[1],lines[var]])))
{
print "core" headers[1] ;
printf "aaa " lines[var] " ";
printf files[1] " " array[files[1],headers[1],lines[var]] " ";
printf files[2] " " array[files[2],headers[1],lines[var]]" ";
print files[3] " " array[files[3],headers[1],lines[var]];
}
}
}
这个程序在我电脑上的gawk3.16上运行成功。
假设1:每个文件中的日期:2010/09/10总是相同的,或者即使不同也不影响输出。
假设2:每个文件的第二列:aaa总是相同的,或者即使不同也不影响输出。
假设3:每个文件只有在第三列:0x00X相同时,才比较后面的五位数字。如果不同,则依据你给定的格式输出。
假设4:每个文件core0下的行数均相同,core1下的行数叶相同。
假设5:每个文件的core0与core1分别对待
程序如下
BEGIN {i=1;}
{if(curfn != FILENAME)
{curfn = FILENAME;files[i]=curfn;i++;j=1;}
}
{if($1=="cpu")
{curcore=$3;curcores[j] = $3;j++;k=1;}
else
{lines[curcore,k]=$3;array[curfn,curcore,$3]=$4;k++;}
}
END {
for(var in lines){
split(var,headers,SUBSEP);
if(!((array[files[1],headers[1],lines[var]]==\
array[files[2],headers[1],lines[var]])&&\
(array[files[2],headers[1],lines[var]]==\
array[files[3],headers[1],lines[var]])))
{
print "core" headers[1] ;
printf "aaa " lines[var] " ";
printf files[1] " " array[files[1],headers[1],lines[var]] " ";
printf files[2] " " array[files[2],headers[1],lines[var]]" ";
print files[3] " " array[files[3],headers[1],lines[var]];
}
}
}
这个程序在我电脑上的gawk3.16上运行成功。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询