
Eu tenho os seguintes valores em um arquivo:
line 1: 31915
line 2: Salchipapa|papa|salchicha|aceite|queso
Preciso pegar os valores papa, salchicha, aceite, queso
isso significa que preciso obter os valores da linha 2, coluna 2 ativada.
Responder1
Você poderia lê-los todos em uma matriz, alterando-os IFS
e mantendo-os para uso futuro.....
OIFS=$IFS; IFS='|'; array=($(sed '2q;d' "$filename")); IFS=$OIFS
echo ${array[0]}
Salchipapa
echo ${array[1]}
papa
Dessa forma, você não está se restringindo a 10 valores arbitrários e também não precisa testar 'nulo' mais tarde porque sabe o número de elementos na matriz....
echo ${#array[@]}
5
Então você apenas ....
for (( i=0; i<${#array[@]}; i++ )); do echo ${array[$i]}; done
Salchipapa
papa
salchicha
aceite
queso
Responder2
Fiz assim e funcionou:
for i in {2..10}
do
ingName=$(sed -n 2p $filename | cut -d '|' -f $i)
done
"sed -n 2p $filename" obtém a segunda linha do arquivo e depois "cut -d '|' -f $i" me dá cada ingrediente separado por tubos. o número 10 indica que são no máximo 10 ingredientes, então mais adiante no código eu valido que trabalhei apenas quando a variável ingName não é nula.
Responder3
Supondo que o conteúdo real do arquivo seja
31915
Salchipapa|papa|salchicha|aceite|queso
então você poderia usar
awk -F '|' 'FNR == 2 { for (i=2; i<=NF; ++i) print $i }' file
para imprimir os campos do 2º campo em diante a partir da segunda linha, uma palavra por linha de saída.
O seguinte sed
comando faria o mesmo:
sed '1d;2y/|/\n/;s/[^\n]*\n//' file
Ele faz isso excluindo a primeira linha da entrada, depois altera todas as barras verticais para novas linhas e exclui até (e incluindo) a primeira nova linha.
O gasoduto
tail -n 1 file | cut -d '|' -f 2- | tr '|' '\n'
produziria a mesma saída, dados os dados de exemplo, selecionando a última linha com tail
, extraindo os campos da segunda em diante com cut
e, em seguida, alterando todos os pipes para novas linhas.
Uma variação do acima:
tail -n 1 file | tr '|' '\n' | tail -n +2
Responder4
Tentei com o comando abaixo e funcionou bem
awk 'NR==2{print $NF}' filename| awk -F "|" '{$1="";print $0}' |sed -r "s/^\s+//g"| perl -pne "s/ /\n/g"
saída
papa
salchicha
aceite
queso