2013-05-19 2 views
-3

Я хотел бы написать сценарий UNIX, который необходимо выполнить следующие действия, чтобы иметь результат ФФ:Как изменить выходной текстовый файл результат

textfile1 содержит следующий текст:

keyval1,1 
    keyval1,2 
    keyval1,3 
    keyval1,4 
    keyval2,1 
    keyval2,2 
    keyval3,1 
    keyval4,1 
    keyval4,3 
    keyval4,4 

Ожидаемый результат:

keyval1 (1,2,3,4) 
    keyval2 (1,2) 
    keyval2 (1) 
    keyval4 (1,3,4) 

спасибо.

Я новичок в unix, и это то, что я сделал до сих пор. Это не работает, хотя еще :(

#!/bin/ksh 
f1 = 'cut -d "," -f 1 keyval.txt' 
f2 = 'cut -d "," -f 2 keyval.txt' 
while f1 <> f2 
do 
echo f1 "("f2")" 
done > output.txt 
+1

а где ты ударил? –

+0

H Я, я обновил свой пост. – mysticfalls

ответ

2

Вы можете сделать это на ветру с помощью AWK:

#!/usr/bin/awk -f 
BEGIN { 
    FS = "," 
    closeBracket = "" 
} 

{ 
    if (key != $1) 
    { 
     key = $1 
     printf "%s%s (%s", closeBracket, key, $2 
    } 
    else 
    { 
     printf ",%s", $2 
    } 

    closeBracket = ")\n" 
} 

END { 
    printf "%s", closeBracket 
} 
+0

привет, спасибо за ответ, но он, похоже, не работает. Каково значение ключа в инструкции if? – mysticfalls

+1

Он начинается как пустая строка, но после чтения в строке он становится первым полем (например, keyval1, keyval2). Как вы его запускаете и каков результат? Либо ** (1) ** поместите код в файл (например, 'group.awk'), установите разрешение на выполнение (' chmod + x group.awk'), а затем запустите с помощью. ./group.awk ', или ** (2) ** введите все в командной строке: 'awk 'BEGIN ...}' '. – tom

+0

получил его там пропал! на #/usr/bin ... спасибо !!! могу ли я спросить, что такое использование% s? – mysticfalls

3

Немного опоздал на вечеринку, но у меня был один заложить вокруг, почти:

#!/usr/bin/perl 
while (<>) 
{ 
    /(.+),(.?+)\s*/; 
    push @{$h{$1}}, $2; 
} 
print map {"$_ (" . join(',', @{$h{$_}}) . ")\n"} sort keys %h; 

Не особенно красивая, но это получить работу.

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