Как запустить программу fortran77 с входными данными из файла?

С помощью команды GNUdatamash:

$ datamash -t'|' -s -g 1,2,3,4,5,6 sum 7 < infile
11|ABCD|19900101123123445455|555|AAA|50505050|9004230
13|ABCD|201803010YYY66666666|600|ETC|20180300|8409

Вdatamash v1.2+вы также можете указать диапазон столбцов.

$ datamash -t'|' -s -g 1-6 sum 7 < infile

Или самая короткаяAWKальтернатива, и где у вас было N столбцов, и вы не должны указывать все один за другим:

awk -F'|' '{x=$NF;NF--; a[$0]+=x} END{for(i in a) print i, a[i]}' OFS='|' infile

7
14.10.2019, 04:54
2 ответа

Я сделал следующий программный файлprog.f

       program test

       character IN*30,OUT*30,line*80

       PRINT *,'Input file '
       READ(*,'(A)') IN
       OPEN(1,FILE=IN,STATUS='OLD')
       PRINT *,'Output file?'
       READ(*,'(A)') OUT
       OPEN(2,FILE=OUT,STATUS='NEW',BLANK='ZERO')


       read (1,'(a80)') line
       write (2,*) "I read ", line
       end

скомпилировал и связал его с

gfortran prog.f -o prog

Я поместил текстовую строку во входной файл

echo "Hello World" > in

Затем я отправил имена входного файла inи выходного файла outв программу

$ <<< 'in
out'./prog
 Input file 
 Output file?

и проверил выходной файл

$ cat out
 I read Hello World                                                                     

<<<работает в bash. Вы можете предпочесть трубопровод из echo, который является более портативным,

.
$ rm out
rm: remove normal file 'out'? y

$ echo 'in
out' |./prog
 Input file 
 Output file?
$ cat out
 I read Hello World                                                                     
8
27.01.2020, 20:16

Если повезет, то может

<infile./program  >outfile

будет работать. Перенаправление для предоставления файлового дескриптора. Варианты/аргументы???


Пока мы, земляне, пишем что-то типа...

$ <77in cat >77.out
$ cat 77in >77.out

(Это копирует только 77inв77.out)

...этой программе/команде Fortran77 нужны были операнды построчно в одном входном файле/потоке:

$  <77.io cat
77in
77.out

Теперь, если бы catбыло чем-то другим, первая строка была бы проанализирована как входной файл (, содержащий «hello\nworld», например. )и второй как файл для создания.

И это кажется более новым, простым способом...


Вместо длинного списка аргументов вроде cp -a dir1 dir2 destэто <in_list cpa77.

Но тогда нужен дополнительный файл... как и в современных cpio:

<filelist cpio -o >files.cpio. Конечно, cpioпросто нужен STDIN построчно:

find. | cpio -o >files.cpio

(cpioимеет этот специальный синтаксис вызова из-за его функционирования, работающего со многими файлами. Это одна с половиной команда . То же для tar, по-другому)

Если что-то и типично для Unix, так это гибкость в передаче управления и данных командам в оболочке. Как я прокомментировал :хороший Q в конце концов! (Спасибо за принятый ответ!)

4
27.01.2020, 20:16

Теги

Похожие вопросы