Adicione um padrão antes do delimitador

1

Estou procurando um comando para adicionar um padrão antes ou o delimitador.

Minha picada:

1 |Chris|ubuntu

Aqui meu delimitador é | e quero gerar uma string com essa entrada.

Resultado

1 = ID and Chris = Name and Ubuntu = OS

Às vezes, minha entrada tem apenas 2 valores. Digamos que 2 | Ram , que tem um valor e nenhum delimitador, deve ser impresso:

2=ID and Ram=Name

Então, field1 + "and" + field2 + "and" + field3 . Se field3 não estiver disponível na string de entrada, use field1 + "and" + field2 .

    
por user322904 26.11.2018 / 20:34

2 respostas

1

awk -F '|' '
            { printf("%d = ID and %s = Name", $1, $2) } 
    NF == 3 { printf(" and %s = OS", $3) }
            { printf("\n") }' file

Isso geraria

1 = ID and Chris = Name and ubuntu = OS
2 = ID and  Ram = Name

para os dados fornecidos. O código awk simplesmente insere os dois primeiros campos no modelo printf format. Se um terceiro campo estiver disponível, a parte do SO será então emitida na mesma linha. A linha é então finalizada por uma nova linha.

    
por 26.11.2018 / 21:47
0

Em Bash :

#!/usr/bin/env bash

if [ "$#" -eq 0 ]
then
    printf "Missing argument\n" >&2
    exit 1
fi

num_of_delimiters="$(grep -o '|' <<< "$1" | wc -l)"
sting="$(sed -E 's,\s+\|,|,g' <<< "$1")"
sting="$(sed -E 's,\|\s+,|,g' <<< "$sting")"

case "$num_of_delimiters" in
    1)
    echo "$(cut -d '|' -f1 <<< "$sting")"=ID and "$(cut -d '|' -f2 <<< "$sting")"=Name
    ;;
    2)
    echo "$(cut -d '|' -f1 <<< "$sting")" = ID and "$(cut -d '|' -f2 <<< "$sting")" = Name and \
         "$(sed  's/./\U&/' <<< "$(cut -d '|' -f3 <<< "$sting")")" = OS
    ;;
    *)
    printf "More than 2 delimiters or no delimiters\n" >&2
    exit 2
esac

Ele também imprime espaços em branco como você mostrou em seu exemplo e converter a primeira letra da terceira palavra para maiúscula. Exemplos:

$ ./sting.sh "2 | Ram"
2=ID and Ram=Name
$ ./sting.sh "1 |Chris|ubuntu"
1 = ID and Chris = Name and Ubuntu = OS

Nenhum erro relatado por https://www.shellcheck.net/ .

    
por 26.11.2018 / 21:30