datepart来自文件名

时间:2016-03-09 17:40:30

标签: bash csv awk

我的bash脚本技能还处于起步阶段,但我需要从文件名中获取日期部分...

文件如下所示:filename.csv.20160229_015007

显然这个文件是filename.csv.yyyymmdd_hhmmss ..我在理想世界中需要的是年,月,日,小时,分钟,秒的单独变量

我稍后会在我的剧本中使用这些。我已经完成了剪辑和awk命令,但收效甚微,但仍在播放。

3 个答案:

答案 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"

包括诊断打印件。