2017-06-15 68 views
1

是否可以從大文件中提取最新和最舊的時間並將其放入變量中?例如(原始文件不包含空格):獲取變量內文件中最年輕和最古老的日期(bash)

2020747462 170615095632 984732454353 
2020747462 170615143620 278645456456 
2020747462 170615103212 192040326564 
2020747462 170615035912 139583824564 

,並得到

Youngest: 170615035912 
Oldest : 170615143620 

的TIMEFORMAT(年月日)是該行中的固定位置。我在互聯網上環顧四周,但找不到任何例子或類似的東西。我希望有人知道如何在bash中做到這一點。

+0

'原始文件沒有空格?那麼如何解釋田野呢? – Inian

+0

這些日期是在文件中的固定位置。如2020747462170615095632984732454353.本例中日期的位置是11-22。 – N3tM0nk

+0

請發佈您的原始文件的樣子,假設沒有空格。更新輸入示例 – Inian

回答

1
cut -c11-22 file \ 
| sort \ 
| sed -n -e '1{s/^/Youngest: /;p};${s/^/Oldest : /;p}' 

第一線從所述文件中提取的字符11-22,下一個排序輸出線,最後打印的第一和最後一行,前面加上年紀最小和最老的話。

+0

這可行。只有我需要忽略文件開頭的第一個2和文件結尾的最後一行。 – N3tM0nk

+1

@ N3tM0nk:以'tail -n + 3 |頭-n-1「。 – choroba

0
perl -a -ne ' 
    BEGIN{$y=9} 
    next if $.==1 || $.==2 || eof; # to skip first second and last line 
    $y=$F[1] if $F[1] lt $y; 
    $o=$F[1] if $F[1] gt $o; 
    END{print "Youngest: $y\nOldest : $o\n"}' <file 
0

爲了完整起見,下面是與AWK一個例子:

awk '{ dayt[NR]=$2 } END { asort(dayt,dat1);printf "Youngest:\t"dat1[1]"\nOldest:\t"dat1[NR]"\n" }' filename 

其中,文件名是有問題的文件,把第二列到一個數組稱爲dayt,然後使用ASORT按值對它們進行排序,把結果放在dat1中。最後打印第一個和最後一個條目(由NR表示的最後一個條目索引)