Как объединить набор столбцов на основе общего поля - PullRequest
0 голосов
/ 29 апреля 2020

Как я могу сделать следующее в bash.

a) Вынуть столбцы 1,2,6

b) Строка идентифицируется полем 'packetId'; Может быть одна или две строки с одинаковым 'packageId'; если есть 2 строки с одинаковым packageId, тогда добавьте первую строку с последним полем второй строки

c) Если есть только одна строка для 'packageId', тогда проигнорируйте эту строку и donot печать

ввод

SequenceId,TimeStamp,packetId,size,secondaryid,eventType,randomfield,Source,Destination,SystemTime 
1,3:41:24,1,100,xyz,event1,abc,S1,D1,1586989874

2,3:41:25,1,100,xyz,event2,abc,S1,D1,1586989877

3,3:41:26,2,100,xyz,event1,abc,S1,D1,1586989879

4,3:41:26,3,100,xyz,event1,abc,S1,D1,1586989871

5,3:41:26,3,100,xyz,event2,abc,S1,D1,1586989879

вывод

packetId,size,secondaryid,randomfield,Source,Destination,SystemTime,OtherSystemTime

1,100,xyz,abc,S1,D1,1586989874,1586989877

3,100,xyz,abc,S1,D1,1586989871,1586989879

1 Ответ

0 голосов
/ 29 апреля 2020

Вы можете сделать все это в awk, но проще использовать cut, чтобы сначала удалить поля, которые вам не нужны:

$ cut -d, -f3-5,7- input.csv |
  awk -F, 'NR == 1 { print $0 ",OtherSystemTime"; next }
           { if ($1 in seen) print seen[$1] "," $NF; else seen[$1] = $0 }'
packetId,size,secondaryid,randomfield,Source,Destination,SystemTime,OtherSystemTime
1,100,xyz,abc,S1,D1,1586989874,1586989877
3,100,xyz,abc,S1,D1,1586989871,1586989879
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...