比较2行与awk

时间:2019-02-01 12:24:28

标签: awk

I'like打印从行中的所有第二场为一列,如果他们的第一个字段是相同的。第一相同日提交的未定义

的量

示例

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

所需的输出

1 abc def ghi    
2 abc    
3 abc def

3 个答案:

答案 0 :(得分:1)

假设您的输入已排序:

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

答案 1 :(得分:1)

另一个awk

$ cat michael.txt
1 abc
1 def
1 ghi
2 abc
3 abc
3 def
$ awk  ' { c=$1; if(p!=c && NR>1 ) { print p,b,a;b="" } if(p==c) { b=b " "a} p=c;a=$2 } END { print p,b,a } ' michael.txt
1  abc def ghi
2  abc
3  abc def

答案 2 :(得分:0)

请尝试以下操作,它还会以Input_file的第一个字段出现的相同形式为您提供输出。

awk '
!a[$1]++{
  b[++count]=$1
}
{
  c[$1]=(c[$1]?c[$1] OFS $2:$2)
}
END{
  for(i=1;i<=count;i++){
    print b[i],c[b[i]]
  }
}'  Input_file