Prefira x / à linha onde x é uma variável em cada linha

1

Eu quero adicionar $x/ dos dados formatados como $x-xyz ( xyz é uma mistura de texto e número a ser ignorado).

Exemplo de dados

AB-10C
CD-02E

Resultado

AB/AB-10C
CD/CD-02E

Como descrevo a variável como texto antes do hífen? Minha ideia é:

define $x = # don't know how to do that
## and then somehow use sed to prepend
sed -i s/$/$x/ file
# I don't know if sed can handle variables though - the above one liner is from Googling
    
por Oxwivi 29.01.2012 / 12:17

2 respostas

5

Aqui está uma versão rápida e suja do awk :

awk -F- '{print $1"/"$0}' input_file > output_file

O que ele faz é usar - como separador de campo e imprime a primeira coluna (ou seja, tudo antes do primeiro - ), depois um / e, em seguida, toda a linha original.

Uma maneira de fazer a mesma coisa com sed seria:

sed -e 's;^\([^-]*\)\(.*\);/;' input_file > output_file

(mas isso dificilmente pode ser lido).

Se você quiser fazer isso em bash , use as manipulações de string :

$ foo=AB-10C
$ prefix=${foo%%-*}
$ echo ${prefix}/${foo}
AB/AB-10C

Use isso em um loop while read ou similar se os dados forem provenientes de um arquivo.

    
por 29.01.2012 / 12:27
0

Isso pode funcionar para você:

echo -e "123,AB-10C,4\n567,CD-02E,8" |
sed 's|\([^,]*\)-.*|/&|'
123,AB/AB-10C,4
567,CD/CD-02E,8
    
por 30.01.2012 / 17:08

Tags