我有一个目录/ user / reports,该目录下有许多文件,其中一个是:
report.active_user.30092018.77325.csv
我需要输出日期后的数字,即上面文件名中的 77325 。
我创建了以下命令,以从文件名中查找值:
ls /user/reports | awk -F. '/report.active_user.30092018/ {print $(NF-1)}'
现在,我希望当前日期作为变量传递到上述命令中并获取结果:
ls /user/reports | awk -F. '/report.active_user.$(date +'%d%m%Y')/ {print $(NF-1)}'
但未获得所需的输出。
尝试过bash脚本:
#!/usr/bin/env bash
_date=`date +%d%m%Y`
active=$(ls /user/reports | awk -F. '/report.active_user.${_date}/ {print $(NF-1)}')
echo $active
但是输出仍然是空白的。
请帮助使用正确的语法。
答案 0 :(得分:1)
正如@cyrus所说,您必须在变量分配中使用双引号,因为简单引号仅用于字符串,而不用于包含变量。
基本用例
number=10
string='I m sentence with or wihtout var $number'
echo $string
正确的用例
number=10
string_with_number="I m sentence with var $number"
echo $string_with_number
您可以使用简单的引号,但不能包含所有字符串
number=10
string_with_number='I m sentence with var '$number
echo $string_with_number
答案 1 :(得分:0)
您不需要awk:您可以使用Shell的功能进行管理
for file in report.active_user."$(date "+%d%m%Y")"*; do
tmp=${file%.*} # remove the extension
number=${tmp##*.} # remove the prefix up to and including the last dot
echo "$number"
done
请参见https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion