如何编写shell脚本,实现文件自动转换?

How to write shell script,to automate file conversion?

我有 30 个文件(ascii),我想将其转换为已编译的 binary.Linux 命令行(FORTRAN 77 代码)

./rec_binary 

代码的相关部分

      character*72 ifname,ofname
c
      write(*, fmt="(/'Enter input file name')")
      read(5,85) ifname
85    format(a72)
      write(*, fmt="(/'Enter output file name')")
      read(5,85) ofname

然后代码要求输入和输出文件名

Enter input file name
rec01.txt

Enter output file name
rec.01

如何实现自动化?我试过这样

#!/bin/csh -f
set list = 'ls rec*.txt'
foreach file ($list)
rec_binary ${file} > 

#!/bin/sh
for f in .txt
do
./rec_binary F
done

但我不知道接下来的 step.Text 个文件是

rec01.txt
rec02.txt

rec30.txt

输出文件

rec.01
rec.02

rec.30

假设,您了解 rec_binary。我不确定它是做什么的。我正在根据您的相关输入进行编造。

for i in rec*.txt;
 do
    rec_binary "$i"
done

试试这个:

#!/bin/bash
for each in `ls rec*.txt`
do
  op_file=$(echo $each | sed 's/\(rec\)\([0-9]*\).txt/\./')
  ./rec_binary <<EOF
$each
$op_file
EOF
done

变量 op_file 将您的 rec01.txt 转换为 rec.01。

有很多不同的方法可以做到这一点。一种方法是使用 for 循环,但是,尚不清楚您显示的 rec_binary 命令是否允许参数。

for i in rec*.txt; do
    num=$( echo $i | egrep -o "\d+" )
    echo ${i} > "rec.${num}"
done 

如果您可以从命令行 ./rec_binary file1 file2 执行类似的操作,那么应该可以。如果 rec_binary 命令回显到标准输出,那么您可以将它发送到文件:

for i in rec*.txt; do
    num=$( echo $i | egrep -o "\d+" )
    rec_binary ${i} > "rec.${num}"
done

$num 变量只是在循环时从文件名中捕获数字,然后我们可以在 运行 下一个命令构造文件名时使用它。