Сравните 2 строки с awk - PullRequest
0 голосов
/ 01 февраля 2019

Я хотел бы напечатать все второе поле из строк в одной строке, если их первое поле идентично.Количество первых идентичных полей не определено

Пример

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

Желаемый результат

1 abc def ghi    
2 abc    
3 abc def

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Не могли бы вы попробовать следующее, он также предоставит вам вывод в той же форме, в которой появилось 1-е поле 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
0 голосов
/ 01 февраля 2019

Еще один 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
0 голосов
/ 01 февраля 2019

Если ваш вход отсортирован:

$ 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;print r.
      2. Заполните p и r значением первого столбца.
    2. Добавьте пробел (FS) и значение второго столбца к r.
  • В конце файла выведите r.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...