首页 > 解决方案 > 将 2 行与 awk 进行比较

问题描述

如果它们的第一个字段相同,我想从一行中的行中打印所有第二个字段。第一个相同文件的数量未定义

例子

1 abc    
1 def    
1 ghi    
2 abc    
3 abc    
3 def

期望的输出

1 abc def ghi    
2 abc    
3 abc def

标签: awk

解决方案


假设您的输入已排序:

$ awk 'p!=$1{if(NR>1) print r;p=r=$1}
{r=(r OFS $2)} END{print r}' file
1 abc def ghi
2 abc
3 abc def
  • 对于每一行;
    1. 如果它的第一列等于p(即上一行的第一列);
      1. 如果行号 ( NR) 大于 1;打印r
      2. 填充pr使用第一列的值。
    2. 将空格 ( OFS) 和第二列的值添加到r.
  • 在文件末尾,打印r.

推荐阅读