2012-04-11 2 views
0

Ввод текстового файлаОбъединение столбцов в текстовом файле

A | 1 | def | 1432 
A | 1 | ffr | 1234 
A | 1 | dfs | 3241 
A | 2 | asf | 2213 

Желаемая Выходной

A | 1 | def 1432,ffr 1234,dfs 3241 
A | 2 | asf 2213 

Объединение значений, относящихся к 2-й колонке в одной строке

+1

и на ваш вопрос? – pavel

+0

Я хочу желаемый выход, как показано выше. – Debaditya

+2

Что вы делаете с «B | 1 | aaa | 111» в примере ввода? Связано ли оно с линией «A | 1» или нет? Что означает «родственный»? Вы печатаете несколько копий дублированного текста? Предоставление ограниченного образца не обеспечивает достаточной детализации. –

ответ

2

А вот попытка Perl:

perl -F'\s+\|\s+' -alne ' 
$a{$F[1]} .= "$F[2] $F[3],"; 
END { 
    $_ = "A | $_ | $a{$_}", s/,$//, print for sort keys %a; 
}' FILE 
+0

Это не работает. Его просто печать,,, ...,, – Debaditya

+0

Просто проверено - это дает ваш пример вывода из вашего примера ввода. – yazu

2

Ваша проблема не но это шаг к решению:

awk -F\| '{ a[$1 "|" $2] = a[$1 "|" $2 ] "," $3 $4 } 
    END { for(x in a) print x a[x]}' input | 
    sed 's/,/|/' # Trim leading comma 

Это будет неправильно удалять первую запятую в любом из первых двух столбцов вместо неправильно вставленной ведущей запятой в третьем столбце вывода и сортировать по обоим первым двум столбцам, а не только по 2-й. Кроме того, порядок вывода будет отличаться от ввода. Возможно, есть и другие проблемы, но это может помочь.

+0

Мне нужно сгруппировать по 2-м столбцу. и печать 3-го 4-го столбца. как показано выше. – Debaditya

0
awk ' 
    BEGIN { FS = " \\| "; OFS = SUBSEP = " | " } 
    { 
     val[$1,$2] = val[$1,$2] sep[$1,$2] $3 " " $4 
     sep[$1,$2] = "," 
    } 
    END { for (key in val) print key, val[key] } 
' 

Это, вероятно, не сохраняют порядок ввода. Кроме того, он использует как 1-й, так и 2-й столбцы в качестве ключа, но, как вы говорите, 1-й столбец не изменяется, это не имеет значения.

Смежные вопросы