小编TTT*_*TTT的帖子

使用点空间与点斜杠执行文件

我正在尝试使用现有的代码库但遇到了问题.简而言之,我执行一个shell脚本(让我们称之为这个A),其第一步是调用另一个脚本(B).脚本B在我当前的目录中(我正在使用的程序的要求).该软件的手册参考了bash,但是评论A表明它是在开发的ksh.bash到目前为止我一直在经营.

在内部A,要执行的行B是:

. B
Run Code Online (Sandbox Code Playgroud)

它使用"点空间"语法来调用程序.它没有做任何不寻常的事情sudo.

当我在A没有点空格语法的情况下调用时,即:

./A
Run Code Online (Sandbox Code Playgroud)

它总是错误,说它找不到文件B.我说pwd,ls,whoami,echo $SHELL,和echo $PATH线A调试和确认,B实际上是在那里,脚本与相同的运行$SHELL,因为我在命令提示符下,脚本是相同的用户,因为我,和脚本有$PATH和我一样的搜索路径.我还验证了我是否这样做:

. B
Run Code Online (Sandbox Code Playgroud)

在命令行,它工作得很好.但是,如果我将内部语法更改A为:

./B
Run Code Online (Sandbox Code Playgroud)

相反,然后A成功执行.

同样,如果我执行A与点空间句法,那么这两个. B./B工作.

总结:
./A仅在A包含./B语法时才有效.
. …

linux bash shell ksh operators

20
推荐指数
1
解决办法
1万
查看次数

sed替换最后一行匹配模式

给定这样的文件:

a
b
a
b
Run Code Online (Sandbox Code Playgroud)

我希望能够用来sed替换文件中包含"a"实例的最后一行.因此,如果我想用"c"替换它,那么输出应该如下所示:

a
b
c
b
Run Code Online (Sandbox Code Playgroud)

请注意,无论可能遇到多少匹配,或者确切了解所需模式或文件内容的详细信息,我都需要这样做.提前致谢.

regex bash sed

14
推荐指数
2
解决办法
1万
查看次数

带有子程序和函数的Fortran OpenMP

免责声明:我很确定这已在某个地方得到解答,但我和其他人一直在努力寻找无济于事.

我有一个看起来像这样的代码:

      PROGRAM main
!$omp parallel do
!$omp private(somestuff) shared(otherstuff)
      DO i=1,n
        ...
        CALL mysubroutine(args)
        ...
        a=myfunction(moreargs)
        ...
      ENDDO
!$omp end parallel do
      END PROGRAM
      SUBROUTINE mysubroutine(things)
      ...
      END SUBROUTINE
      FUNCTION myfunction(morethings)
      ...
      END FUNCTION
Run Code Online (Sandbox Code Playgroud)

我无法确定子程序和函数中变量的私有,共享,减少等子句的位置和方式.我怀疑答案可能会有一些细微差别,因为变量可能在很多很多方面被声明并在它们之间共享.因此,假设主程序所关注的所有变量都在其中或在共享模块中定义,并且可以在主代码中处理对这些变量的任何OMP操作.子例程和函数使用其中的一些变量,并拥有一些自己的变量.所以,我认为问题归结为如何处理其局部变量的子句.

fortran openmp thread-safety

5
推荐指数
1
解决办法
2884
查看次数

Fortran读取混合字符串和数字数据

我在阅读声明方面遇到了麻烦.我更喜欢Fortran90,但如果它有帮助,其他版本可能是可能的.我在文件中有一堆数据,可以描述为:

  • 空格分隔
  • 不是固定的格式
  • 包含一个后跟7个数字的字符串
  • string包含正斜杠/

这是一个例子:

maxele/OS1_HC_LF_A_0001_004_maxele.63    4.22E-03        9.00E-01        1.00E-06        1       -999    -999    -999
maxele/OS1_Inl_A_0001_005_maxele.63     2.11E-03        9.00E-01        1.00E-06        3       -999    -999    -999
maxele/OS1_HC_LF_C_0001_009_maxele.63  1.56E-03        9.00E-01        1.00E-06        2       58.77   -82.82  28.91
maxele/OS1_TS_B_0001_006_maxele.63   3.90E-03        9.00E-01        1.00E-06        1       -999    -999    -999  
Run Code Online (Sandbox Code Playgroud)

我已经了解到如果遇到无格式读取的斜杠(/)字符,Fortran将停止读取语句,因此我必须使用格式说明符.并且由于字符串长度未知,我不确定如何确保字符串读取在第一个空格处停止.我相信它可以在整行中阅读,然后再进行解析,但这看起来很复杂.有没有办法强迫它将数据视为空格分隔?提前致谢.

fortran

3
推荐指数
1
解决办法
2514
查看次数

在Bash中,有没有办法用双引号扩展变量两次?

为了调试我的脚本,我想在每个输出的开头添加内部变量$ FUNCNAME和$ LINENO,所以我知道输出发生在哪个函数和行号上.

foo(){
    local bar="something"
    echo "$FUNCNAME $LINENO: I just set bar to $bar"
}
Run Code Online (Sandbox Code Playgroud)

但是由于会有很多调试输出,如果我可以执行以下操作,它会更清晰:

foo(){
    local trace='$FUNCNAME $LINENO'
    local bar="something"
    echo "$trace: I just set bar to $bar"
}
Run Code Online (Sandbox Code Playgroud)

但上面的字面输出:"$ FUNCNAME $ LINENO:我只是设置了一些东西"我认为这样做是因为双引号只扩展了一次内部的变量.

是否有一种语法上干净的方法在同一行中扩展变量两次?

linux bash parameter-passing variable-expansion parameter-expansion

3
推荐指数
1
解决办法
411
查看次数

Fortran 无格式 I/O 优化

我正在研究一组严重 I/O 绑定的 Fortran 程序,因此我正在尝试对其进行优化。我在多个 地方读到写整个数组比单个元素WRITE(10)arr快,即比DO i=1,n; WRITE(10) arr(i); ENDDO. 但是,我不清楚我的案子在这方面会落在哪里。从概念上讲,我的代码类似于:

OPEN(10,FILE='testfile',FORM='UNFORMATTED')
DO i=1,n
  [calculations to determine m values stored in array arr]
  WRITE(10) m
  DO j=1,m
    WRITE(10) arr(j)
  ENDDO
ENDDO
Run Code Online (Sandbox Code Playgroud)

但是m每次DO i=1,n循环都可能发生变化,因此写入整个数组arr不是一种选择。因此,折叠 DO 循环以进行写入最终会得到WRITE(10) arr(1:m),这与写入整个数组不同。这是否仍然可以加快写作速度,那么阅读呢?我可以在计算后分配一个大小为 m 的数组,将值分配给该数组,写入它,然后释放它,但这似乎太复杂了。

我还看到了有关隐含 DO 循环写入的不同信息,即WRITE(10) (arr(j),j=1,m)它们是否有助于/损害 I/O 开销。

我现在正在运行几个测试,并打算更新我的观察结果。其他适用的建议

额外细节:

  • 第一个程序创建一个大文件,第二个程序读取它。而且,不,合并这两个程序并将所有内容保留在内存中并不是一个有效的选择。
  • 我使用的是未格式化的 I/O,并且可以访问 Portland Group 和 gfortran 编译器。我的理解是 PG 通常更快,所以这就是我正在使用的。
  • 输出文件目前约为 600 GB,代码需要几个小时才能运行。
  • 第二个程序(读入文件)似乎特别昂贵。我已经监视了系统,发现它主要受 CPU 限制,即使我将代码减少到仅读取文件的程度,这表明读取每个值时所有 I/O 调用的 …

io performance fortran

1
推荐指数
2
解决办法
955
查看次数