Bash 将单词从同一文件文本的一行移到另一行

Bash 将单词从同一文件文本的一行移到另一行,bash,Bash,我有一个文本文件,我想将“/a”从文本的第507行移到第561行。 我将只放一部分文件文本 例如: A NAME="23_09_15at12_37_00_comp_sum_mismatch" < /A > <data> ----------------- Mismatch analysis ------------------------------------------------------------- Statistics

我有一个文本文件,我想将“/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\u 09\u 15at12\u 37\u 00\u补偿总额\u不匹配”
-----------------
不匹配分析
-------------------------------------------------------------
统计所有数据均为标准差。
-------------------------------------------------------------
人口扩张
---------------------
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
θ0.00000.00000.00000
θ0 qt 2.5%0.00000 0.00000
θ0 qt 5%0.000000.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 >
A NAME=“23\u 09\u 15at12\u 37\u 00\u补偿和不匹配”
-----------------
不匹配分析
-------------------------------------------------------------
统计所有数据均为标准差。
-------------------------------------------------------------
人口扩张
---------------------
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
θ0.00000.00000.00000
θ0 qt 2.5%0.00000 0.00000
θ0 qt 5%0.000000.00000


您可以使用
sed
执行以下任务:

sed -e '507s=</A>==' -e '561i\
</A>' input-file > output-file
sed-e'507s=='-e'561i\
'输入文件>输出文件

第一个命令表示“在第507行,将
替换为零”;第二个意思是“在第561行之前插入
”,

awk
,以便救援

可能比sed版本更具可读性

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

事实上,我不仅想搬家“/A”,而且还想搬家。顺便说一句,当我键入第二个命令时,我有一个错误“:command I expected \后跟文本。你知道为什么吗?@CafféSospeso:用
替换
/A
,它应该仍然可以工作。也许你有不同的sed版本/实现,试着在
\
后面加一个新行(答案更新)我试图使用这个命令,但它给了我同样的错误。我忘了提到我使用的是Mac。可能它与您建议的命令不一样。它可以工作,唯一的问题是它不删除第一个,但保留两个。它必须与写入的字符串完全匹配,并使用标记间距。如果是这样,可能是您的
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 >