2017-07-21 120 views
0

我有下面的輸入,我想選擇日期從現在到2周或3周等行。文本處理選擇日期範圍

0029L5 08/19/2017 00:57:33 
0182L5 08/19/2017 05:53:57 
0183L5 02/17/2018 00:00:16 
0091L5 10/19/2022 00:00:04 
0045L5 07/27/2017 09:03:56 
0059L5 08/14/2017 00:51:50 
0100L5 08/20/2017 01:25:39 
0111L5 08/21/2017 00:46:15 
0128L5 08/21/2017 12:38:51 
D00054 07/21/2017 09:01:19 

因此所需的輸出,如果讓我們說我要2周,從現在

0045L5 07/27/2017 09:03:56 
D00054 07/21/2017 09:01:19 

但是如果我想爲讓例如4星期吧,輸出應爲

0045L5 07/27/2017 09:03:56 
0059L5 08/14/2017 00:51:50 
D00054 07/21/2017 09:01:19 
+1

絕對不是sed。你試過了什麼,你卡在哪裏? –

+0

現在'日期總是最後一行? – RomanPerekhrest

+0

我正在嘗試使用Guru的AIX解決方案,我試圖計算epoch時間,因爲mktime在AIX awk中不受支持,但是我沒有得到任何公式來將給定日期轉換爲曆元時間進行比較 – Sid

回答

0

這工作細紋,請讓我知道如果任何人有任何AIX其他簡單的解決方案。

awk '{split($2,a,"/");split($3,b,":"); print $1,b[3],b[2],b[1],a[2],a[1],a[3]}' /tmp/TLD_1 | head -10 | while read media sec min hour day mon year; do month=$((10#$mon-1)); expiry=$(perl -e 'use Time::Local; print timegm(@ARGV[0,1,2,3], $ARGV[4], $ARGV[5]), "\n";' $sec $min $hour $day $month $year); current=$(date +%s); twoweeks=$(($current + (2*7*24*60*60))); if [ "$expiry" -gt "$current" -a "$expiry" -lt "$twoweeks" ]; then echo "$media $mon/$day/$year $hour:$min:$sec"; fi; done 
+0

如果你可以使用perl,那麼只需在perl中完成整個事情。如果你創建一個問題並用Perl標記它,我相信你會得到一個答案。 –

0

一方式:

awk '{split($2,a,"/");split($3,b,":"); x=mktime(a[3]" "a[1]" "a[2]" "b[1]" "b[2]" "b[3]);y=systime();}x>y && x<(y+(n*7*24*60*60))' n=2 file 

其中n in dicates週數

split($2,a,"/") =>拆分在陣列的/的基礎上,第2列和存儲一個

split($3,b,":") =>拆分的:的基礎,並存儲在陣列上的第三列b

mktime =>給出

x包含在以秒爲文件中的時間以秒爲單位的時間

y保存當前時間(秒)

+0

這在AIX機器中不起作用。 – Sid

+0

AIX中不支持mktime和systime日期函數,我試圖將時間解釋爲時代進行比較。仍然卡住 – Sid

+0

試圖將日期轉換爲紀元時間以與日期+%s進行比較,但是我沒有收到任何數學公式,因爲日期-d''+%s在AIX – Sid

0

下面是使用bash一個解決方案,其中file是你的文件的名稱:

while read r; do dd=$(($(date -d "${r:6}" +%s) - $(date +%s))); echo $(($dd/(3600*24))); done < file 

這將計算在${r:6}(當前行的子串)在日期間秒鐘的時間差和今天的日期$(date +%s)和將其轉換爲幾天。

只輸出其中的時間差小於2周(1209600秒)

while read r; do dd=$(($(date -d "${r:6}" +%s) - $(date +%s))); if [ "$dd" -lt 1209600 ]; then echo $r; fi; done < file 
+0

中不受支持date -d is在AIX中不支持 – Sid

+0

@Sid嘗試刪除'-d' – user2314737

+0

日期:0551-402日期/時間規範中的字符無效 – Sid