- 论坛徽章:
- 0
|
本帖最后由 springwind426 于 2010-04-14 09:03 编辑
- 我的思路是先排序(按照第一和第三字段排序),然后读取信息,只保存三行信息,当第三行时进行判断并处理
- test.awk
- BEGIN{i=0;FS="&";today=strftime("%Y-%m-%d 23:59:59")}
- {
- i++
- a[i]=$0
- b[i]=$1
- c[i]=$3
- }
- i==3{
- if (b[1]==b[2] && b[2]==b[3])
- {
- i=0;
- f=(c[2]>today)?"fileA":"fileB"
- print a[2] >> f
- f=(c[3]>today)?"fileA":"fileB"
- print a[3] >> f
- }
- else if(b[2]==b[3])
- {
- f=(c[1]>today)?"fileA":"fileB"
- print a[1] >> f
- a[1]=a[2];
- b[1]=b[2];
- c[1]=c[2];
- a[2]=a[3];
- b[2]=b[3];
- c[2]=c[3];
- i=2
- }
- else
- {
- f=(c[1]>today)?"fileA":"fileB"
- print a[1] >> f
- f=(c[2]>today)?"fileA":"fileB"
- print a[2] >> f
- i=1
- a[1]=a[3];
- b[1]=b[3];
- c[1]=c[3];
- }
- }
- END{
- if(i<3){
- f=(c[1]>today)?"fileA":"fileB"
- print a[1] >> f
- }
- if(i==2){
- f=(c[2]>today)?"fileA":"fileB"
- print a[2] >> f
- }
- }
- 解释:
- 当三行的第一字段都相同的时候,只输出第二和第三行
- 当第二和第三行的第一字段相同时,表明第一行是孤行,则输出,同时把第二和第三行前移
- 否则,第一行、第二行都是孤行,输出,第三行移到第一行
- sort -t'&' -k1,1 -k3,3 数据文件 | awk -f test.awk
复制代码 |
|