繁体   English   中英

用 awk 替换字符

[英]Replace characters with awk

我有以下文件:

61 12451
61 13451
61 14451
61 15415
12 48469
12 78456
12 47845 
32 45778
32 48745
32 47845
32 52448
32 87451

我想要的输出如下,例如,61 s 被 1 替换,因为它们是第一次出现并重复 4 次,然后第二列从 2 到 5,因为这些是成对比较,1 到 1 是被忽略,但第二列应该从 2 开始,以此类推。

1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
3 6
3 7
3 8

关于如何使用 AWK 实现这一目标的任何建议? 谢谢!

它可以用这样的一个 awk 命令编写

awk '{a[NR]=$1;b[NR]=$2;c[NR]=$1;d[NR]=$2} END {for(i=1; i<=NR; i++){if(i==1){c[i]=1;d[i]=2}else if(a[i]==a[i-1]){c[i]=c[i-1];d[i]=1+d[i-1]}else{c[i]=1+c[i-1];d[i]=c[i]+1}print c[i],d[i]}}' pairwise.txt > output.txt

这里 a 和 b 是读取文件第一列和第二列的数组。 新值作为第一列和第二列存储在数组 c 和 d 中,并打印到输出文件中。

不确定这个单线是否有帮助:

awk '$1!=p{++i;j=i+1}{print i,j++;p=$1}' file

至少它提供了所需的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM