объединить строки с одинаковыми значениями столбцов - PullRequest
0 голосов
/ 03 февраля 2020

Я новичок в bash. У меня есть файл .csv. Он содержит 2 столбца (имя и номер). Вот содержимое столбцов:

Name,Num 
ex1,10.20.30.40 
ex2,20.30.40.30 
ex3,10.45.60.20 
ex4,10.20.30.40
ex5,20.30.40.30

Я хочу объединить строки, чтобы их 2-й столбец был идентичен. Например здесь у меня есть 2 строки, что их 2-й столбец "10.20.30.40". Я хочу, чтобы вывод был таким:

Name,Num 
ex1 ex4,10.20.30.40 
ex2 ex5,20.30.40.30 
ex3,10.45.60.20 

, поэтому столбец имени в первой строке содержит как ex1, так и ex2. Я много искал, и все, что я нашел, было, как сортировать строки на основе их 2-го столбца:

echo $(awk -F ',' '{print $2}' name.csv | sort) >> sub2.csv

, но он только сортирует и печатает второй столбец в «sub2.csv».

Я также попробовал этот скрипт:

echo $(awk -F',' '{k=$2;if(a[k])a[k]=a[k] OFS $1;else{a[k]=$0;b[++i]=k}}
           END{for(x=1;x<=i;x++)print a[b[x]]}' name.csv) >> sub2.csv

, но вывод сбивает с толку (например, строки не разделены).

Не могли бы вы рассказать мне, как это сделать?

1 Ответ

1 голос
/ 03 февраля 2020
awk 'BEGIN{FS=","} NR==1{print;next} {a[$2]=$2 in a ? a[$2] " " $1 : $1} END{for(i in a) print a[i] "," i}' file

Вывод:

Name,Num 
ex1 ex4,10.20.30.40
ex2 ex5,20.30.40.30
ex3,10.45.60.20

Получено из: { ссылка }

См .: 4 Примеры операторов Awk (если, если еще если еще, если :? )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...