将2行与awk进行比较

将2行与awk进行比较,awk,Awk,如果第一个字段相同,我想打印一行中所有第二个字段。第一个相同字段的数量未定义 范例 1 abc 1 def 1 ghi 2 abc 3 abc 3 def 期望输出 1 abc def ghi 2 abc 3 abc def 假设您的输入已排序: $ 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

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

范例

1 abc    
1 def    
1 ghi    
2 abc    
3 abc    
3 def
期望输出

1 abc def ghi    
2 abc    
3 abc def

假设您的输入已排序:

$ 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
对于每一行; 如果其第一列等于p,即前一行的第一列; 如果行号NR大于1;打印r。 用第一列的值填充p和r。 将空格s和第二列的值添加到r。 在文件末尾,打印r。
请尝试以下内容,它也将以输入文件的第一个字段出现的相同形式为您提供输出

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
另一个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

欢迎来到堆栈溢出!对不起,这不是StackOverflow的工作方式。我想做X的形式问题,请给我提示和/或示例代码被认为是离题的。请访问并阅读,尤其是阅读@MichelWegmueller试图解释的内容,希望您能理解。嗨@oguzismail,我在运行这个命令时,为每个{}中的变量使用了很多print语句,现在我明白了这是谁在工作。非常感谢你