从文件中复制数据并粘贴到Linux中不同目录中的文件

时间:2019-11-22 14:55:20

标签: linux shell loops copy-paste

我的输入有三个文件(param.in,pl.in,tp.in),我运行了一个程序(在fortran77中,名为swift_mvs),我的输出有三个文件(dump_param.dat, dump_pl.dat和dump_tp.dat)。我想运行该程序144次(12个月x 12年),每次运行以保存3个输入文件,3个输出文件(保存在:home /.../ 1st Year / 1st Month等)并使用每次运行的输出作为新输入。我已经手动完成此操作,两到两个星期后,我意识到自己犯了一个错误,因此必须从头开始。我编写了这个脚本:

 #! /bin/bash

 for j in {1,12} # loop for the 12 years
    do

 for i in {1,11} # loop for the 12 month      
    do

     ./swift_mvs
      cp dump_param.dat ""$j"ος Χρόνος"/""$i"ος Μήνας"/param"$i"Mon.dat
      nano dump_param.dat
      cp dump_param.dat param.in
      cp dump_param.dat ""$j"ος Χρόνος"/""$((i+1))"ος Μήνας"/param"$((i+1))"Mon.in
      cp dump_pl.dat ""$j"ος Χρόνος"/""$i"ος Μήνας"/pl"$i"Mon.dat
      cp dump_pl.dat pl.in
      cp dump_pl.dat ""$j"ος Χρόνος"/""$((i+1))"ος Μήνας"/pl"$((i+1))"Mon.in
      cp dump_tp.dat ""$j"ος Χρόνος"/""$i"ος Μήνας"/tp"$i"Mon.dat
      cp dump_tp.dat tp.in
      cp dump_tp.dat ""$j"ος Χρόνος"/""$((i+1))"ος Μήνας"/tp"$((i+1))"Mon.in

  done
  ./swift_mvs
  cp dump_param.dat ""$(j)"ος Χρόνος"/'12ος Μήνας'/param12Mon.dat
  cp dump_pl.dat ""$j"ος Χρόνος"/'12ος Μήνας'/pl12Mon.dat
  cp dump_tp.dat ""$j"ος Χρόνος"/'12ος Μήνας'/tp12Mon.dat
  nano dump_param.dat
  cp dump_param.dat param.in
  if [ j -lt 12 ]
  then
  cp dump_param.dat ""$((j+1))"ος Χρόνος"/'1ος Μήνας'/param1Mon.in
  cp dump_pl.dat pl.in
  cp dump_pl.dat ""$((j+1))"ος Χρόνος"/'1ος Μήνας'/pl1Mon.in
  cp dump_tp.dat tp.in
  cp dump_tp.dat ""$((j+1))"ος Χρόνος"/'1ος Μήνας'/tp1Mon.in
  fi
done

对于i = 1,2,一切都很好,但是当i = 3时,程序不对数据进行cp处理,则文件保持为空。我在{3,11}中为i尝试查看会发生什么,并且在i = 4之后,文件再次保持为空。认为是我没有收到错误消息。任何帮助将是有用的。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

最重要的是,j需要{1..12}。不是{1,12}。 (它是点号“ ..”;不是逗号。)

类似地,我也是。如果需要144,则需要{1..12}。

因为您可以尝试以下操作,但在那里只能获得两个值:

$ for j in {1,12}; do echo $j; done
1
12

这应该有助于您进一步调试程序。

此外,您需要在复制之前先创建文件夹。

我建议也改善压痕。但是,我不确定内循环缩进的某些部分是否在发布期间弄乱了;即使它可能正确地存在于您的源文件中。由你决定。