ultimas ultima por para lineas linea fichero eliminar contar con comando caracteres cantidad archivo command-line fortran wc

command-line - ultima - linux bash contar lineas



Encontrar el número de líneas de un archivo de datos usando la línea de comando (2)

Esto no es posible de una manera directa. Puede redirigir el resultado del comando a un archivo, luego abrirlo y leerlo http://compgroups.net/comp.lang.fortran/how-to-get-the-output-of-call-system-in- av / 216294

O use algunas funciones aún más sofisticadas de las funciones de Unix y llame a su API C (vea la primera respuesta en ese hilo).

El EXECUTE_COMMAND_LINE () tampoco tiene ninguna característica para leer el resultado del comando directamente.

Existe una forma convencional de leer cada línea una a una y comprobar que el iostat muestra un valor distinto de cero o negativo en cada lectura. Sin embargo, me gustaría llamar a la rutina del system(command) y usar el comando wc -l para contar el número y luego quiero asignar la dimensión de la matriz donde quiero poner los datos. Por ejemplo, estoy imprimiendo el número de líneas en ambos sentidos:

Program Test_reading_lines integer:: count,ios, whatever character(LEN=100):: command Print*,''Reading number of lines in a standard way'' count=0 open (10, file=''DATA_FILE'') Do read (10,*,iostat=ios) whatever if (ios/=0) exit count=count+1 End Do close(10) Print*,''Number of lines ='', count Print*,''Reading number of lines using shell command'' command=''cat DATA_FILE | wc -l'' call system(command) Print*,''Number of lines ='',''< ? >'' End Program Test_reading_lines

Desafortunadamente, en este último caso, ¿puedo asignar una variable como count como en el caso estándar? Es decir, quiero imprimir una variable en lugar de ''< ? >'' ''< ? >'' en el último comando de impresión.


Si desea utilizar el comando de Unix $ wc -l , puede llamar a la subrutina de Fortran execute_command_line que es común a muchos compiladores de Fortran, incluidos los de gfortran .

Aquí hay un ejemplo de trabajo que calcula el número de líneas, líneas, de un archivo llamado style.gnuplot y luego utiliza nlines para agregar algunas filas a style.gnuplot sobrescribiendo el último.

PROGRAM numLines IMPLICIT NONE integer, parameter :: n = 100 integer :: i, nLines real, parameter :: x0 = -3.14, xEnd = 3.14 real :: dx real, dimension (:), allocatable :: x, fun allocate(x(0:n)) ! Allocate the x array allocate(fun(0:n)) ! Allocate the fun array dx = abs(xEnd-x0)/n x(0:n) = [(x0+i*dx, i = 0,n)] ! Create the x array fun(0:n) = [(sin(x0+i*dx), i = 0,n)] ! Create the fun array open(unit=1,file="plotFunction.dat") DO i=0,size(x)-1 write(1,*) x(i), '' '', fun(i) ! Save the function to a file to plot END DO close(unit=1) deallocate(x) ! Deallocate the x array deallocate(fun) ! Deallocate the fun array open(unit=7, file="style.gnuplot") write(7,*) "set title ''y = sin(x)'' font ''times, 24''" write(7,*) "set tics font ''times, 20''" write(7,*) "set key font ''times,20''" write(7,*) "set grid" write(7,*) "set key spacing 1.5" write(7,*) "plot ''<cat'' u 1:2 w l lw 2 linecolor rgb ''orange'' notitle " close(unit=7) CALL execute_command_line("wc -l style.gnuplot | cut -f1 -d'' '' > nlines.file") ! COunt the lines open(unit=1,file=''nlines.file'') read(1,*) nlines ! Here the number of lines is saved to a variable close(unit=1) CALL execute_command_line("rm nlines.file") ! Remove nlines.file CALL execute_command_line("cat plotFunction.dat | gnuplot -p style.gnuplot") ! Show the plot within the executable open(unit=7,file="style.gnuplot") DO i = 1,nLines-1 read(7,*) ! Read the file untile the penultimate row, END DO ! then append the other rows write(7,*) "set object rectangle at -3.14,0 size char 1, char 1", & " fillcolor rgb ''blue'' fillstyle solid border lt 2 lw 1.5" write(7,*) "set object rectangle at 0,0 size char 1, char 1", & " fillcolor rgb ''blue'' fillstyle solid border lt 2 lw 1.5" write(7,*) "set object rectangle at 3.14,0 size char 1, char 1", & " fillcolor rgb ''blue'' fillstyle solid border lt 2 lw 1.5" write(7,*) "plot ''plotFunction.dat'' u 1:2 w l lw 2 linecolor rgb ''orange'' notitle" close(unit=7) CALL execute_command_line("gnuplot -p ''style.gnuplot''") ! Load again style.gnulot with the appended lines END PROGRAM numLines

Mi código podría no ser elegante, ¡pero parece funcionar!