我一直在学习awk而且我遇到了一个我无法解决的问题,请尽可能帮忙。
我有两个使用awk,sort和uniq -c生成的文件。
文件1 的格式为:
1 aaa.c 10/10/2010
1 bbb.h 1/1/2011
3 ccc.c 2/2/2012
1 ccc.c 20/6/2011
1 ddd.c 1/1/2010
1 ddd.c 2/4/1999
1 ddd.c 7/1/2012
1 ddd.c 10/1/1977
含义: number_of_equal_files名称日期(因此,来自同一日期的3个文件ccc.c和来自另一个的1个文件ccc.c)
文件2 的格式为:
4 ddd.c
2 ccc.c
3 xxx.c
含义: number_of_different_dates名称(因此,已发现ccc.c有2个不同的日期) - >数字= 1的文件我删除了一个反向grep,所以不会有任何
我想做的是以
格式生成第三个文件number_of_different_dates name date1 date2 date 3 date4(...)
类似的东西:
2 ccc.c 2/2/2012 20/6/2011
4 ddd.c 1/1/2010 2/4/1999 7/1/2012 10/1/1977
提前致谢!
答案 0 :(得分:2)
您应该只使用第一个文件作为输入来获得该结果。以下使用两个关联数组。第一个收集文件的次数,第二个收集日期。 END
块只打印出现多次的条目。
{
counts[$2] += 1;
dates[$2] = sprintf( "%s %s", dates[$2], $3 );
}
END {
for ( f in dates ) {
if ( counts[f] > 1 )
printf( "%d %s %s\n", counts[f], f, dates[f]);
}
}
答案 1 :(得分:1)
你可以尝试这样的事情 -
#!/usr/bin/awk -f
NR==FNR{
a[$3]=$2; b[$2]++;next
}
($2 in b){
printf ("%s %s ", $1,$2);
for (i in a)
if (a[i]==$2)
printf i" "; print ""
}
[jaypal:~/Temp] cat file1
1 aaa.c 10/10/2010
1 bbb.h 1/1/2011
3 ccc.c 2/2/2012
1 ccc.c 20/6/2011
1 ddd.c 1/1/2010
1 ddd.c 2/4/1999
1 ddd.c 7/1/2012
1 ddd.c 10/1/1977
[jaypal:~/Temp] cat file2
4 ddd.c
2 ccc.c
3 xxx.c
[jaypal:~/Temp] ./s.awk ff1 ff2
4 ddd.c 10/1/1977 1/1/2010 2/4/1999 7/1/2012
2 ccc.c 20/6/2011 2/2/2012