比较两个相邻行中的字段#1,并从字段#1标识的所有行打印字段#2

2024-10-01 04:46:01 发布

您现在位置:Python中文网/ 问答频道 /正文

可以认为是 this bash question 的一个变体,我在这里问这个问题之前查阅了这个变体。你知道吗

下面是一个示例文件:

C=b933cda8ce0/0 p=880080
C=b933cdd6580/0 p=880080
C=b933d02a240/0 p=880080
C=b933d059610/0 p=880080
C=b933d1c8690/0 p=880080
C=b933d2c1b60/0 p=1560315
C=b933d2c1b60/0 p=880080
C=b933d32f240/0 p=1229793
C=b933d32f240/0 p=123412

这里的输出应该是:

C=b933d2c1b60/0 p1=1560315 p2=880080
C=b933d32f240/0 p1=1229793 p2=123412

我需要从字段#1匹配的所有行打印字段#2和字段#1的所有值。你知道吗

虽然我用下面的一行字完成了这项工作,但对我来说,这并不是很优雅/高效:

d=0; q=0; cat file |while read -r c p; do if [[ $c = $d ]]; then printf "$c\t$p\t$q\n"; fi; d=$c; q=$p; done

代码可以在任何标记的语言/工具中。你知道吗


Tags: 文件bash示例变体thisquestionp2p1
1条回答
网友
1楼 · 发布于 2024-10-01 04:46:01

快去营救

awk '{
  c[$1]++; 
  sub("p","p"c[$1],$2); 
  sep=(c[$1]>1)?FS:""; 
  a[$1]=a[$1] sep $2
} 
END {
  for(i in a) print i, a[i]
}' file

基于键连接第二个字段(第一个字段)。带有参数索引的后缀p(以c计)。有一个格式化技巧,不需要将第一个和第二个字段的空格加倍。你知道吗

相关问题 更多 >