剪切:|:没有此文件或目录

剪切:|:没有此文件或目录
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

答案1

cut将参数理解$line为文件名。如果您的 shell 是 bash,则可以使用<<<以下单词:

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

但是,不需要调用外部命令,bash 可以通过参数替换来完成:

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

答案2

我在遇到类似问题时发现了这一点,但在 OP 帖子中,您可以看到 shell 会尝试将 $line 读取为命令的文件。然而,当我像这样回显和管道化命令时,我遇到了同样的问题:

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;

答案3

在 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"

对于输入读取,这适用于 echo

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

相关内容