我的bash脚本技能还处于起步阶段,但我需要从文件名中获取日期部分...
文件如下所示:filename.csv.20160229_015007
显然这个文件是filename.csv.yyyymmdd_hhmmss ..我在理想世界中需要的是年,月,日,小时,分钟,秒的单独变量
我稍后会在我的剧本中使用这些。我已经完成了剪辑和awk命令,但收效甚微,但仍在播放。
泰
答案 0 :(得分:1)
传统上我已经使用$ fn="filename.csv.20160229_015007"
$ dt=$( echo "${fn}" | cut -d. -f3 )
$ echo "${dt}"
20160229_015007
$ year=$( echo "${dt}" | cut -c1-4 )
$ month=$( echo "${dt}" | cut -c5-6 )
$ day=$( echo "${dt}" | cut -c7-8 )
$ hour=$( echo "${dt}" | cut -c10-11 )
$ minute=$( echo "${dt}" | cut -c12-13 )
$ second=$( echo "${dt}" | cut -c14-15 )
$ echo "${year} ${month} ${day} ${hour} ${minute} ${second}"
2016 02 29 01 50 07
,因为我发现它很明确。尝试:
cut
或者,如果你正在使用Bash并且不想使用$ dt=${fn##*.}
$ echo "${dt}"
20160229_015007
$ year="${dt:0:4}"
$ month="${dt:4:2}"
$ day="${dt:6:2}"
$ hour="${dt:9:2}"
$ minute="${dt:11:2}"
$ second="${dt:13:2}"
$ echo "${year} ${month} ${day} ${hour} ${minute} ${second}"
2016 02 29 01 50 07
,那么更简洁的方法是:
void WinFoldersTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
switch (e.Node.Text) {
case "Home Drive":
Process.Start(EnvPaths.HomeDrive);
break;
case "Program Files":
Process.Start(EnvPaths.ProgramFiles);
break;
case "Common Files":
Process.Start(EnvPaths.CommonFiles);
break;
// etc...
答案 1 :(得分:0)
$ fname="filename.csv.20160229_015007"
$ set -f # turn off globbing since we're about to use an unquoted variable
$ arr=( ${fname//[._]/ } )
$ echo "${arr[0]}"
filename
$ echo "${arr[1]}"
csv
$ echo "${arr[2]}"
20160229
$ echo "${arr[3]}"
015007
$ echo "${arr[2]:0:4}"
2016
$ echo "${arr[2]:4:2}"
02
$ echo "${arr[2]:6:2}"
29
$ echo "${arr[3]:0:2}"
01
$ echo "${arr[3]:2:2}"
50
$ echo "${arr[3]:4:2}"
07
答案 2 :(得分:0)
如果您有权使用date
实用程序,可以通过获取字符串来实现此目的。
#!/bin/sh
DATE=`echo filename.csv.20160229_015007|
awk 'BEGIN{FS="[._]";timestring=""}{
timestring=substr($4,1,2);
for(i=1;i<3;i++){
timestring=timestring":"substr($4,i*2+1,2);
}
system("date --date='"'"'"$3" "timestring"'"'"' +'"'"'%y %m %d %H %M %S'"'"'");
}'`
read -a arr <<<"$DATE"
echo "$DATE"
echo "${arr[@]}"
year="${arr[0]}"
month="${arr[1]}"
day="${arr[2]}"
hour="${arr[3]}"
minute="${arr[4]}"
second="${arr[5]}"
echo year="$year"
echo month="$month"
echo day="$day"
echo hour="$hour"
echo minute="$minute"
echo second="$second"
包括诊断打印件。