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