cut: |: Нет такого файла или каталога

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 ответа

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

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

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

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

Я обнаружил это, когда столкнулся с подобной проблемой, однако в посте OP вы можете увидеть, что оболочка будет пытаться прочитать строку $ как файл для команды. Однако у меня возникла та же проблема, когда я повторял и передавал команду следующим образом:

while read line;
   do
      FILE=QRPGLESRC;
      MBR=$(echo "$line" | cut -d" " -f1);
      PATH=$(echo "$FILE.$MBR" | tr '[:upper:]' '[:lower:]');
      echo $PATH;
done < listofstuff

Это отразится на:

./parse.sh: line 8: cut: No such file or directory
./parse.sh: line 9: tr: No such file or directory

После некоторой головной боли я понял, что это не переменная, которую он считает файлом, а команда. Я использовал абсолютные пути для команд (используя их, чтобы найти их), и это решило мою проблему:

while read line;
   do
      FILE=QRPGLESRC;
      MBR=$(echo "$line" | /usr/bin/cut -d" " -f1);
      PATH=$(echo "$FILE.$MBR" | /usr/bin/tr '[:upper:]' '[:lower:]');
      echo $PATH;
done < listofstuff;

На 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
Другие вопросы по тегам