我要保存带有此结构的日期和文件名的文件:
date1 name1
date2 name2
...
dateN nameN
之后,我将使用WALE命令读取文件,并尝试比较日期字段是否等于给定的日期。如果日期相同,我要保存名称然后打印。
while read line
do
if [ ‘$($line | cut -c 1-10)’ == ‘$(date +%Y-%m-%d)’ ]
then
name=$($linea | cut -c 12-100)
fi
echo $name
done < archivos.txt
执行脚本后,控制台将每个日期都给我带来"未找到命令"错误的每个日期。
预先感谢: - )
您的方法很有趣,但是跳过while
循环并将awk
一起使用,将日期作为参数更容易:
awk '$1~d {print $2}' d=$(date +%Y-%m-%d) archivos.txt
-
$1~d {print $2}
如果第一个字段匹配给定的日期,请打印第二个字段。 -
d=$(date +%Y-%m-%d)
将今天的日期传递给awk
。
样本
$ cat a
2014-01-28 hello
2014-01-28 byetwo
2014-02-28 bye
2014-01-29 bye
$ awk '$1~d {print $2}' d=$(date +%Y-%m-%d) a
hello
byetwo
您的代码的编写方式,您正在尝试执行$line
作为命令。您需要使用echo
或printf
将行写入stdout:
$(printf %s "$line" | cut -c 1-10)
这发生了,因为您的脚本找不到日期命令。这为您提供了两个选择。
选项1:找到日期二进制并给出完整的路径
在您的命令提示符中运行" where date",它应该输出一些喜欢的东西 日期:/bin/date/usr/share/man/man1/date.1.gz然后,您可以更改
$(date +%Y-%m-%d)
to
$(/bin/date +%Y-%m-%d)
选项2:导出应寻找二进制的路径
找不到日期的原因是因为它不在脚本的路径变量中。您可以将/bin/添加到路径上,也可以与外壳中的相同。跑步 回声$路径在您的外壳中,它应该输出一些像他的
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
然后您可以做的就是将脚本路径变量设置为同一事物,因此看起来像这样:
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
while read line
do
if [ ‘$($line | cut -c 1-10)’ == ‘$(date +%Y-%m-%d)’ ]
then
name=$($linea | cut -c 12-100)
fi
echo $name
done < archivos.txt