Skip to main content
 首页 » 编程设计

python之保留相关行 block 中的第一行

2025年05月04日15yxwkf

我有一个包含这样几行的文件:

r1  300  #keep this one 
r1  200 
r1  100 
r1  100 
r2  100  # " 
r2  200 
r3  200  # " 
r3  100 
r3  300 

我只需要保留每个“ block ”的第一行(r1、r2、r3 等)

期望的输出:

r1  300 
r2  100 
r3  200 

有什么建议吗?

请您参考如下方法:

您可以跟踪对第一列的更改,并且仅在不同时打印:

awk '$1 != last; {last = $1}' file 

分号之前的部分有一个隐含的{print} Action ,所以如果第一列不等于last 的值将打印该行(已编辑, 谢谢)。分号后的代码块无条件运行,并将第一列的值赋给变量last。

稍微安全一点的是单独处理第一行(就像我最初所做的那样)并添加一个额外的条件:

awk '!last || $1 != last; {last = $1}' file 

当第一行的第一列包含数字 0 时,这会处理这种情况,在它被赋值之前将被评估为等于 last。

如果第一列的内容从不重复,您可以使脚本更简单,如评论中指出的那样(谢谢):

awk '!seen[$1]++' file 

这只打印第一列还没有被看到的行,因为 seen[$1] 的计算结果为 false。 ++ 表示在具有相同 $1 值的后续行中,seen[$1] 已递增,因此计算结果为真。