stm_unix
stm_unix

Reputation: 11

How to extract date from filename with extenstion using shell script

I tried to extract date from filenames for first two rows only with extension .log ex: filenames are as follows my_logFile.txt contains

abc20140916_1.log
abhgg20140914_1.log
abf20140910_1.log
log.abc_abc20140909_1

The code I tried:

awk '{print substr($1,length($1)-3,4)}' my_logFile.txt

But getting op as:

.log
.log
.log

Need op as:

20140916
20140914

*****revised query* I have a txt file containing n number of log files. Each line in txt file is like this.

-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 abc20140405_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 aghtff20140404_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 log.pqrs20140403_1

I need to extract date out of file names from only first two rows. Here the filename has varying number of char before date. The op should beL

20140405
20140404 

Upvotes: 0

Views: 92

Answers (2)

fedorqui
fedorqui

Reputation: 289505

Will this work to you?

$ head -2 file | grep -Po ' [a-z]+\K[0-9]+(?=.*\.log$)'
20140405
20140404

Explanation

  • head -2 file gets the first two lines of the file.
  • grep -Po ' [a-z]+\K[0-9]+(?=.*\.log$)' gets the set of digits in between a block of (space + a-z letters) and (.log + end of line).

Upvotes: 1

Nachiket Kate
Nachiket Kate

Reputation: 8571

try this,

cut -f9 -d " " <file> | grep -o -E "[0-9]{8}"

worked on my machine,

[root@giam20 ~]# cat sample.txt
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 abc20140405_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 aghtff20140404_1.log
-rw-rw-rw- 1 abchost abchost 241315175 Apr 16 10:45 log.pqrs20140403_1
[root@giam20 ~]# cut -f9 -d " " sample.txt | grep -o -E "[0-9]{8}"
20140405
20140404
20140403

Upvotes: 0

Related Questions