Используйте несколько строк с Awk

У меня есть CSV с разделителями подчеркивания. У меня есть 8 строк, которые нужно преобразовать в одну таким образом:

101_1_variableName_(value)
101_1_variableName1_(value2)

в:

101 1 (value) (value2)

(желательно в разных коробках)

Проблема в том, что я не знаю, как использовать несколько строк в awk для формирования одной строки. Любая помощь приветствуется.

ОБНОВЛЕНИЕ: (ввод + вывод)

101_1_1_trialOutcome_found_berry            
101_1_1_trialStartTime_2014-08-05 11:26:49.510000           
101_1_1_trialOutcomeTime_2014-08-05 11:27:00.318000         
101_1_1_trialResponseTime_0:00:05.804000            
101_1_1_whichResponse_d         
101_1_1_bearPosition_6          
101_1_1_patch_9         
101_1_1_food_11 

(последняя часть все в одну строку)

101 1 1 found_berry 2014-08-05 11:26:49.510000 2014-08-05 11:27:00.318000 0:00:05.804000 d 6 9 11

person lacraig2    schedule 15.09.2014    source источник
comment
небольшой пример был бы лучше. Это значения заключены в ()? Что вы имеете в виду под in different boxes preferably ?   -  person Avinash Raj    schedule 15.09.2014
comment
Значения не заключены в (). Однако все они подчеркнуты символами подчеркивания, если это поможет.   -  person lacraig2    schedule 15.09.2014
comment
Я имею в виду, что это файл CSV, и если бы я сказал, чтобы он открылся в Excel для кого-то другого, он поместил бы каждое соответствующее значение в разные поля.   -  person lacraig2    schedule 15.09.2014
comment
Действительно ли variableName и variableName1 разные строки? что сопоставляет эти две строки друг с другом? Первые два значения?   -  person Etan Reisner    schedule 15.09.2014
comment
имя_переменной и имя_переменной1 — разные строки. Каждая из этих строк в восьми строках должна быть передана так же, как и эти строки. Все, что я сделал, это показал формат.   -  person lacraig2    schedule 15.09.2014
comment
вместо формата вы можете опубликовать пример ввода и ожидаемый результат.   -  person Avinash Raj    schedule 15.09.2014
comment
Я обновил ввод + вывод   -  person lacraig2    schedule 15.09.2014
comment
Вы хотели проверить, совпадают ли первый столбец в строке 1 и первый столбец в строке 2?   -  person Avinash Raj    schedule 15.09.2014
comment
последняя часть первой строки berry, а не found_berry   -  person jaypal singh    schedule 15.09.2014


Ответы (1)


Вы можете использовать Perl:

use strict;
use warnings;

my %hash=();

while (<DATA>) {
    if (m/^([0-9_]+)_(?:[^_]+)_(.*?)\s*$/) {
        push @{ $hash{join(' ', split('_', $1) )} }, $2;    
    }
}

print "$_ ". join(' ', @{ $hash{$_} })."\n" for (keys %hash);

__DATA__
101_1_1_trialOutcome_found_berry            
101_1_1_trialStartTime_2014-08-05 11:26:49.510000           
101_1_1_trialOutcomeTime_2014-08-05 11:27:00.318000         
101_1_1_trialResponseTime_0:00:05.804000            
101_1_1_whichResponse_d         
101_1_1_bearPosition_6          
101_1_1_patch_9         
101_1_1_food_11 

Отпечатки:

101 1 1 found_berry 2014-08-05 11:26:49.510000 2014-08-05 11:27:00.318000 0:00:05.804000 d 6 9 11

Или, perl однострочная версия:

$ perl -lane '
> push @{ $hash{join(" ", split("_", $1) )} }, $2 if (m/^([0-9_]+)_(?:[^_]+)_(.*?)\s*$/);
> END { print "$_ ". join(" ", @{ $hash{$_}})."\n" for (keys %hash); }
> ' file.txt
101 1 1 found_berry 2014-08-05 11:26:49.510000 2014-08-05 11:27:00.318000 0:00:05.804000 d 6 9 11
person dawg    schedule 15.09.2014