-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

Я получаю следующую ошибку:

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

2 ответа2

5

cut понимает аргумент $line как имя файла. Если ваша оболочка bash, вы можете использовать <<< здесь-слово:

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

Но нет необходимости вызывать внешние команды, bash может сделать это с подстановкой параметров:

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

на Mac OS X терминал

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

попробуйте это (похоже на выше)

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

для ввода читает это работает с эхом

while read x
do
    echo $x | cut -c3,7    #echo $x | cut -c3,7 (for range of letters)
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .