2012-09-17 29 views
0

我收到的格式如下如何使用bash腳本或者awk來提取一個文件名

[2letters e.g.AF][6-digit-number sequence][Date in ccyymmdd][Time in hhmmss] 

對於實例構造名的文件:

AF00010720120917144500.csv 

我要自動加載此類文件到我的數據庫使用文件的日期部分。

這大致可以這樣開始:

#!/bin/bash 
filename_datepart=$(echo `date -d "1 day ago" +"%d%m%Y"`) 
filename="/home/hlosi/AF000107"$filename_datepart".csv" 

但請記住,部分000107變化與每個新文件。

+0

你期望每天有多少個文件?另外,你不需要'hhmmsss'中的時間嗎? – beny23

+0

我每天收到一個文件。我試圖用數據源推理排除時間部分,因爲它每天只有一個文件無濟於事。 – hlosukwakha

回答

1

這裏是一個BASH解決方案:

#!/bin/bash 

#The full name 
fullname="/home/hlosi/AF00010720120917144500.csv" 

#Rip off the directory 
file=$(basename "$fullname") 

#Now pull out just the characters that we want 
extract=$(echo "$file" | cut -c3-8) 
echo "You want: $extract" 
+0

謝謝,我已經調整了這個問題的一部分。我會嘗試並回復你。非常感謝。 – hlosukwakha

+1

Bash有內置插件,所以你也不需要'剪切',但你必須分階段進行; 'cuttail = $ {文件#????????}; cutc8 = $ {文件%$ cuttail};回聲「$ {cutc8#??}」'。在插值變量時還要注意使用雙引號,除了在賦值中。 – tripleee

+0

@tripleee - 在'bash'常見之前我學會了shell腳本 - 我傾向於堅持舊的方式。儘管你對引號是正確的,但我應該把它們放進去。 –

1

您可以使用通配符來填補未知值

#!/bin/bash 
file=/home/hlosi/AF??????`date -d "1 day ago" +"%d%m%Y"`??????.csv 
echo $file 
+0

這工作得很好:'file =/home/hlosi/AF *'date -d「1 day ago」+「%d%m%Y」'*。csv' – hlosukwakha

0

我想你想這一點。萬一你必須處理多個文件。

#!/bin/bash 
fpath=/home/hlosi/ 
filename_datepart=$(echo `date -d "1 day ago" +"%d%m%Y"`) 
files=$(find $fpath -iname "*$filename_datepart.csv") 
for file in $files 
do 
    echo "found file: " $file 
done 
+0

特別是由於這些人需要數天才能刪除舊文件,因此我的腳本可能必須使用日期部分選擇正確的文件。 – hlosukwakha

0

原諒我我的無知有-atime -ctime -mtime我認爲它-ctime CSV的

find -ctime 1 -name \*.csv -print 

-mtime比賽的結局和正是1日齡,這樣做的問題是它在24小時內工作,所以文件少於24小時,但仍然昨天仍然不會顯示

這將是一個更簡單的做事方式,因爲它不會關心文件名格式的變化,以供將來打樣。

cd pathtcsv; 
d=`date -d "1 day ago" +"%d"` 
d=$d find . -type f -name \*.csv -ctime 1 -exec ls -l {} \;|awk '$7 ~ d'|awk '{print $NF}'| awk '{ print substr($0, length($0) - 1, length($0)) }' 

#d被設定爲昨天的日期= $ d,發現從yseterday具有CSV結束則它的LS,管道進AWK和檢出值7和昨日的日期其中$ 7是文件在ls -l上的日期值,它最終打印最後一個字段和管道到最終的awk打印字符串和分裂從字符位置到字符位置,這是你想要的?你需要弄清楚你需要什麼字符是上述字符位置0到10的另一個例子。

d=$d find . -type f -ctime 1 -name \*.csv -exec ls -l {} \;|awk '$7 ~ d'|awk '{print $NF}'| awk '{ print substr($0, 0, 10)}'