cortar: |: No existe tal archivo o directorio

-1
while read line
    do
        echo $line
        calendar_date=$(cut -d\  -f1 $line)
            hr_of_day=$(cut -d\  -f2 $line)
        echo "date: $calendar_date hr: $hr_of_day"

done < $FILE

Estoy teniendo el siguiente error:

date:  hr:
2011-06-30 | 23
cut: 2011-06-30: No such file or directory
cut: |: No such file or directory
cut: 23: No such file or directory
mahidhar
fuente
1
¿Has buscado cutla entrada manual? ¿Has intentado entender el significado del mensaje de error? Que has intentado
MariusMatutiae
$ line se lee como parámetros de archivo. Es posible escribir algo así como hr_of_day=$(echo "$line" | cut -d\ -f2) si no tiene comillas en su texto entrante.
le_top

Respuestas:

5

cutentiende el $lineargumento como un nombre de archivo. Si su shell es bash, puede usar la <<<palabra aquí:

cut -d' ' -f1 <<< "$line"

Pero, no hay necesidad de llamar a comandos externos, bash puede hacerlo con la sustitución de parámetros:

date=${line%|*}  # Delete from | to the right.
hour=${line#*|}  # Delete up to |.
choroba
fuente
1

en Mac OS X Terminal

test="$(echo '1\2\2016' | cut -d '\' -f3-)" 
echo "year:$test"
prints year from test with an echo string
year:2016  
or
echo "year:"$(echo '1\2\2016' | cut -d '\' -f3-)""
prints year from test with an echo string
year:2016

intente esto (similar al anterior)

calendar_date="$(cut -d '\' -f1 $line)"
hr_of_day="$(cut -d '\' -f2 $line)"
echo "date: $calendar_date hr: $hr_of_day"

para las lecturas de entrada esto funciona con echo

while read x
do
    echo $x | cut -c3,7    #echo $x | cut -c3,7 (for range of letters)
done
Rohit Malgaonkar
fuente
$ line se lee como parámetros de archivo.
le_top
primera publicación editada, por favor, háganos saber ...
Rohit Malgaonkar