Chinaunix

标题: 如何求少的数据 [打印本页]

作者: zhaopingzi    时间: 2020-03-18 11:36
标题: 如何求少的数据
a 1
a 2
a 4
a 6
a 8
a 19
b 2
b 5
b 7
b 10

结果
a 3,5,7,9-18
b 1,3-4,6,8-9

作者: Looiml    时间: 2020-03-18 15:44
  1. awk '{a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}' a.txt
复制代码

a 3,5,7,9-18
b 1,3-4,6,8-9
作者: wh7211    时间: 2020-03-18 21:57
本帖最后由 wh7211 于 2020-03-18 22:51 编辑

回复 1# zhaopingzi


  1. cat 1
  2. a 1
  3. a 2
  4. a 4
  5. a 6
  6. a 8
  7. a 19
  8. b 2
  9. b 5
  10. b 7
  11. b 10

  12. awk '{a[$1][$2]++;b[$1]=b[$1]>$2?b[$1]:$2}END{for(i in a){for(j=1;j<=b[i];j++){if(!a[i][j]){c=c?c:j;c=c<j?c:j;d=d>j?d:j}else{if(c&&c==d){e=e?e","c:c;c=j+1}else if(c&&c!=d){e=e?e","c"-"d:c"-"d;c=j+1}}};print i,e;c=d=e=""}}' 1
  13. a 3,5,7,9-18
  14. b 1,3-4,6,8-9
复制代码

作者: zhaopingzi    时间: 2020-03-25 12:51
回复 2# Looiml


  1. $ awk '{a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}' a.txt
  2. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  3. awk:       ^ syntax error
  4. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  5. awk:                                                                                                ^ syntax error
  6. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  7. awk:                                                                                                    ^ syntax error
  8. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  9. awk:                                                                                                     ^ syntax error
  10. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  11. awk:                                                                                                              ^ syntax error
  12. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  13. awk:                                                                                                                               ^ syntax error
  14. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  15. awk:                                                                                                                                                          ^ syntax error
  16. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  17. awk:                                                                                                                                                                    ^ syntax error
  18. awk: {a[$1][$2];if($2>m[$1])m[$1]=$2}END{for(i in a){printf i" ";f=0;for(j=1;j<=m[i];j++)if(!(j in a[i])){if(f==0)printf j;if(f==1)printf "-";f++}else{if(f>1)printf j-1;if(f>0&&j<m[i])printf ",";f=0}print ""}}
  19. awk:                                                                                                                                                                                    ^ syntax error
复制代码




作者: zhaopingzi    时间: 2020-03-25 12:53
回复 3# wh7211

$ awk '{a[$1][$2]++;b[$1]=b[$1]>$2?b[$1]2}END{for(i in a){for(j=1;j<=b;j++){if(!a[j]){c=c?c:j;c=c<j?c:j;d=d>j?d:j}else{if(c&&c==d){e=e?e","c:c;c=j+1}else if(c&&c!=d){e=e?e","c"-"d:c"-"d;c=j+1}}};print i,e;c=d=e=""}}' a.txt
awk: {a[$1][$2]++;b[$1]=b[$1]>$2?b[$1]2}END{for(i in a){for(j=1;j<=b;j++){if(!a[j]){c=c?c:j;c=c<j?c:j;d=d>j?d:j}else{if(c&&c==d){e=e?e","c:c;c=j+1}else if(c&&c!=d){e=e?e","c"-"d:c"-"d;c=j+1}}};print i,e;c=d=e=""}}
awk:       ^ syntax error
awk: {a[$1][$2]++;b[$1]=b[$1]>$2?b[$1]2}END{for(i in a){for(j=1;j<=b;j++){if(!a[j]){c=c?c:j;c=c<j?c:j;d=d>j?d:j}else{if(c&&c==d){e=e?e","c:c;c=j+1}else if(c&&c!=d){e=e?e","c"-"d:c"-"d;c=j+1}}};print i,e;c=d=e=""}}
awk:                                                                                   ^ syntax error
awk: {a[$1][$2]++;b[$1]=b[$1]>$2?b[$1]2}END{for(i in a){for(j=1;j<=b;j++){if(!a[j]){c=c?c:j;c=c<j?c:j;d=d>j?d:j}else{if(c&&c==d){e=e?e","c:c;c=j+1}else if(c&&c!=d){e=e?e","c"-"d:c"-"d;c=j+1}}};print i,e;c=d=e=""}}
awk:                                                                                                                    ^ syntax error


作者: wh7211    时间: 2020-03-25 14:47
本帖最后由 wh7211 于 2020-03-25 14:49 编辑

回复 5# zhaopingzi


看一下awk版本:
  1. awk --version
复制代码

作者: zhaopingzi    时间: 2020-03-25 15:44
回复 6# wh7211

-bash-3.2# awk --version
GNU Awk 3.1.5
Copyright (C) 1989, 1991-2005 Free Software Foundation.

作者: zhaopingzi    时间: 2020-03-25 16:05
回复 3# wh7211

# awk --version
GNU Awk 4.0.2    这个可以

作者: zhaopingzi    时间: 2020-03-25 16:07
# awk --version
GNU Awk 4.0.2    这个可以

楼上两位的脚本都没问题
作者: zhaopingzi    时间: 2020-04-16 13:56
回复 2# Looiml
a c 1
a c 2
a c 4
a c 6
a c 8
a c 19
b d 2
b d 5
b d 7
b d 10


如何生成:
a c  3,5,7,9-18
b d 1,3-4,6,8-9


作者: wh7211    时间: 2020-04-16 19:55
本帖最后由 wh7211 于 2020-04-16 19:57 编辑

回复 10# zhaopingzi


  1. awk '{a[$1" "$2][$3]++;b[$1" "$2]=b[$1" "$2]>$3?b[$1" "$2]:$3}END{for(i in a){for(j=1;j<=b[i];j++){if(!a[i][j]){c=c?c:j;c=c<j?c:j;d=d>j?d:j}else{if(c&&c==d){e=e?e","c:c;c=j+1}else if(c&&c!=d){e=e?e","c"-"d:c"-"d;c=j+1}}};print i,e;c=d=e=""}}' file
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2