将一个单词从一行移动到另一个相同的文件文本

时间:2016-03-09 12:16:55

标签: bash

我有一个文本文件,我想将“/ A”从第507行移到我文本的第561行。 我将只放置文件的一部分。

这是一个例子:

A NAME="23_09_15at12_37_00_comp_sum_mismatch" < /A >

<data>
-----------------
Mismatch analysis
-------------------------------------------------------------
               Statistics    All_Seqs        Mean        s.d.
-------------------------------------------------------------

Demographic expansion
---------------------
                      Tau        18.6    18.58410     0.00000
              Tau qt 2.5%     7.79899     7.79899     0.00000
                Tau qt 5%    10.53528    10.53528     0.00000
               Tau qt 95%    23.50602    23.50602     0.00000
             Tau qt 97.5%    24.74816    24.74816     0.00000
                   Theta0     0.00000     0.00000     0.00000
           Theta0 qt 2.5%     0.00000     0.00000     0.00000
             Theta0 qt 5%     0.00000     0.00000     0.00000

我想要这个结果:

A NAME="23_09_15at12_37_00_comp_sum_mismatch"

<data>
-----------------
Mismatch analysis
-------------------------------------------------------------
               Statistics    All_Seqs        Mean        s.d.
-------------------------------------------------------------

Demographic expansion
---------------------
                      Tau        18.6    18.58410     0.00000
              Tau qt 2.5%     7.79899     7.79899     0.00000
                Tau qt 5%    10.53528    10.53528     0.00000
               Tau qt 95%    23.50602    23.50602     0.00000
             Tau qt 97.5%    24.74816    24.74816     0.00000
                   Theta0     0.00000     0.00000     0.00000
           Theta0 qt 2.5%     0.00000     0.00000     0.00000
             Theta0 qt 5%     0.00000     0.00000     0.00000
< /A >

2 个答案:

答案 0 :(得分:0)

您可以使用sed执行任务:

sed -e '507s=</A>==' -e '561i\
</A>' input-file > output-file

第一个命令意味着&#34;在第507行,替换</A>没有任何&#34 ;;第二个意思是&#34;在第561行之前,插入</A>&#34;,

答案 1 :(得分:0)

awk救援!

可能比sed

更具可读性
$ awk -v k="< /A >" 'NR==1{sub(k,"")} NR==20{print k} 1' file

我使用行号1和20进行测试,您可以根据实际情况进行更改。请注意,计算行数可能不是您想要的,而是通过其他方式识别/到位置,在这种情况下awk将提供更多选项...

A NAME="23_09_15at12_37_00_comp_sum_mismatch"

<data>
-----------------
Mismatch analysis
-------------------------------------------------------------
               Statistics    All_Seqs        Mean        s.d.
-------------------------------------------------------------

Demographic expansion
---------------------
                      Tau        18.6    18.58410     0.00000
              Tau qt 2.5%     7.79899     7.79899     0.00000
                Tau qt 5%    10.53528    10.53528     0.00000
               Tau qt 95%    23.50602    23.50602     0.00000
             Tau qt 97.5%    24.74816    24.74816     0.00000
                   Theta0     0.00000     0.00000     0.00000
           Theta0 qt 2.5%     0.00000     0.00000     0.00000
             Theta0 qt 5%     0.00000     0.00000     0.00000
< /A >