
Tengo los siguientes valores en un archivo:
line 1: 31915
line 2: Salchipapa|papa|salchicha|aceite|queso
Necesito obtener los valores papa, salchicha, aceite, queso.
eso significa que tengo que obtener los valores de la línea 2, columna 2.
Respuesta1
Puede leerlos todos en una matriz cambiándolos IFS
y conservarlos para uso futuro.....
OIFS=$IFS; IFS='|'; array=($(sed '2q;d' "$filename")); IFS=$OIFS
echo ${array[0]}
Salchipapa
echo ${array[1]}
papa
De esa manera, no se limitará a 10 valores arbitrarios y tampoco necesitará realizar una prueba de "nulo" más adelante porque conoce el número de elementos de la matriz...
echo ${#array[@]}
5
Así que tú simplemente...
for (( i=0; i<${#array[@]}; i++ )); do echo ${array[$i]}; done
Salchipapa
papa
salchicha
aceite
queso
Respuesta2
Lo hice así y funcionó:
for i in {2..10}
do
ingName=$(sed -n 2p $filename | cut -d '|' -f $i)
done
"sed -n 2p $filename" obtiene la segunda línea del archivo y luego "cut -d '|' -f $i" me da cada ingrediente separado por tuberías. el número 10 indica que hay máximo 10 ingredientes, por lo que más adelante en el código valido que trabajé solo cuando la variable ingName no es nula.
Respuesta3
Suponiendo que el contenido real del archivo es
31915
Salchipapa|papa|salchicha|aceite|queso
entonces podrías usar
awk -F '|' 'FNR == 2 { for (i=2; i<=NF; ++i) print $i }' file
para imprimir los campos desde el segundo campo en adelante desde la segunda línea, una palabra por línea de salida.
El siguiente sed
comando haría lo mismo:
sed '1d;2y/|/\n/;s/[^\n]*\n//' file
Para ello, elimina la primera línea de la entrada, luego cambia todas las canalizaciones a nuevas líneas y elimina hasta (incluida) la primera nueva línea.
La tubería
tail -n 1 file | cut -d '|' -f 2- | tr '|' '\n'
produciría el mismo resultado dados los datos de ejemplo seleccionando la última línea con tail
, extrayendo los campos desde la segunda en adelante con cut
y luego cambiando todas las tuberías a nuevas líneas.
Una variación de lo anterior:
tail -n 1 file | tr '|' '\n' | tail -n +2
Respuesta4
Probé con el siguiente comando y funcionó bien
awk 'NR==2{print $NF}' filename| awk -F "|" '{$1="";print $0}' |sed -r "s/^\s+//g"| perl -pne "s/ /\n/g"
producción
papa
salchicha
aceite
queso