用bash的过程行

  • 本文关键字:过程 bash bash cut
  • 更新时间 :
  • 英文 :


我要保存带有此结构的日期和文件名的文件:

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作为命令。您需要使用echoprintf将行写入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

相关内容

  • 没有找到相关文章

最新更新