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