- 论坛徽章:
- 0
|
我的方法比较笨,分4步:
1) 取出第一列数量为2的序号
- sort -n vsort.dat | awk -F'|' '{a[$1]+=1;}END{for(i in a) if(a[i]==2) print i;}' > vsort.dat.1
复制代码
2)取出文件中包含第一步那些序号的行
- fgrep -f vsort.dat.1 vsort.dat > vsort.dat.2
复制代码
3)取出符合你的条件的行的序号
- awk -F'|' 'BEGIN{i=0;}{for(;i<NR;i++) {a[i]=$1;b[i]=$2;}} END {for(i=0;i<NR;i+=2) {if(substr(b[i],1,2)==11 && substr(b[i+1],1,2)==25) print a[i]}}' vsort.dat.2 > vsort.dat.3
复制代码
4)取出第三步得到的序号的行
- fgrep -f vsort.dat.3 vsort.dat > result.dat
复制代码
另:如果第三步改为:
- awk -F'|' '{for(i=0;i<NR;i++) {a[i]=$1;b[i]=$2;}} END {for(j=0;j<NR;j+=2) {if(substr(b[j],1,2)==11 && substr(b[j+1],1,2)==25) print a[j]}}' vsort.dat.2 > vsort.dat.3
复制代码
出来的结果就很混乱, 以下是测试结果:
- awk -F'|' '{for(i=0;i<NR;i++) {a[i]=$1;b[i]=$2; print i, a[i], b[i];}} END {for(j=0;j<NR;j++) {print a[j],b[j];}}' vsort.dat
复制代码
0 1001 11617682
0 1001 25232222
1 1001 25232222
0 1003 11657497
1 1003 11657497
2 1003 11657497
0 1003 25287655
1 1003 25287655
2 1003 25287655
3 1003 25287655
0 1004 11529985
1 1004 11529985
2 1004 11529985
3 1004 11529985
4 1004 11529985
0 1004 997452333334
1 1004 997452333334
2 1004 997452333334
3 1004 997452333334
4 1004 997452333334
5 1004 997452333334
1004 997452333334
1004 997452333334
1004 997452333334
1004 997452333334
1004 997452333334
1004 997452333334
各位老大给予解释,谢谢
Ubuntu:~/Scripts$ awk --version
GNU Awk 3.1.5
[ 本帖最后由 hackevin 于 2006-10-7 19:57 编辑 ] |
|