List the content of a directory specified by loop

2019-03-03 08:52发布

I'm working with numerical weather forecast named as follow:

sub_gfsanl_4_2011MMDD-IIII-FFFF.grb2

-MM stands for month from 01 to 12

-DD stands for days from 01 to 31

-IIII stands for initialisation time, the first and second digits are for hours the third and last are for minutes

-FFFF stands for forecast hour , the first and second digits are for hours the third and last are for minutes

In my directory I have several files for a given days of a given months. A day has 4 data, one at every six hours IIII=0000 ,0600,1200,1800.

What I'm trying to do is to list all files of a given days, here the f90 code I wrote:

program test_ec

implicit none

!==variable declaration==

integer :: mi,di,dil,mil
character*3 :: temp

!==Program instructions==

mil=1
write(temp,'(i2.2)') mil
read(temp,'(i2.2)') mi
!convert the month into a two digit value mi=01  


 ! change to directory where the data are stored
 CALL chdir('/media/Hello/ncfiles/GFS' )

do dil=1,31

     !loop over days
     write(temp,'(i2.2)') dil
     read(temp,'(i2.2)') di

     ! converting day number into a two digit number, store this value into di. ex dil=9 then di=09

CALL execute_command_line( 'ls sub_gfsanl_4_2011${mi}${di}*.nc > yes.txt' )
!list all files with the correct month and days and store it to yes.txt

end do

end program test_ec

For some reasons the execute_command_line doesn't seem to like the $ for variable...

标签: shell fortran
2条回答
forever°为你锁心
2楼-- · 2019-03-03 09:12

Well thanks to Vladimir suggestion here what i did to solve my problem!

program test_ec


implicit none

integer :: mi,di,iiii,fff
 character(len=1024) :: filename
 character(len=1024) :: format_string
 logical exist

mi=1
CALL chdir('/media/Hello/ncfiles/GFS' )

!do di=1,10
     do iiii=0,18,6
         do fff=0,18,6

                   format_string = "(A17,i2.2,i2.2,A1,i4.4,A1,i3.3,A8)"
                    write (filename,format_string) "sub_gfsanl_4_2011",mi,di,"_",iiii,"_",fff,".grb2.nc"

                    inquire(file=trim(filename), exist=exist) 

                           if (exist) then

                                   write(*,*) 'file exists i can do do whatever i want with this file'
                           else
                                   write(*,*) 'I did not find that file.'

                           end if
enddo
   enddo
     enddo

end program test_ec
查看更多
甜甜的少女心
3楼-- · 2019-03-03 09:14

You cannot use ${mi}${di} in shell. They are Fortran variables, not shell variables. You must put the numbers into the string inside Fortran. Use some of the established methods. They were treated here many times in Convert integers to strings to create output filenames at run time and its duplicates (see Related on the right).

查看更多
登录 后发表回答