首页 > 解决方案 > Bash:使用while循环将输入文件解析为输出文件

问题描述

我有一个简单的循环,它逐行读取输入文件(.xyz)并将其回显到输出文件(.gjf)中。但是,我希望它在遇到仅包含“Bonds”的行时终止,以便仅将输入文件的初始部分复制到输出文件中。

我正在为许多输入/输出文件(因此 ${i} 作为文件名)执行此操作,因此复制的行数可能不一样,但在某些时候都会包含带有“Bonds”的行。这就是为什么我需要逐行阅读。

下面的代码将正确地回显到输出文件中,但在遇到“Bonds”时不会退出while循环,而是复制整个输入文件。read -r 的输出不被视为字符串吗?

 while read -r LINE ; do
        if [[ "$LINE" == "Bonds" ]] ; then
            break
        else
            echo "$LINE" >> "${i}.gjf"
        fi
done < "./${i}.xyz"

以下是输入 (.xyz) 文件的示例:

 0 2
 6        0.097055000     -1.260034000      1.473340000
 6        0.336623000     -0.000274000      0.631466000
 1        0.279787000     -2.153356000      0.870406000
 1       -0.939049000     -1.279769000      1.829917000
 1        0.757490000     -1.287905000      2.345029000
 Bonds
 1     2    S
 1     3    S
 1     4    S
 1     5    S
 2     6    S

我只想复制“债券”上方的行。我是 bash 的新手,因此不胜感激。谢谢。

标签: stringbashloopsparsingwhile-loop

解决方案


推荐阅读