unix的问题:使用sed合并两行

unix的问题:使用sed合并两行,unix,sed,merge,Unix,Sed,Merge,我有一个无法解决的奇怪问题。我使用下面的bash脚本在unix上将两行合并在一起。但是,第一行的最后一列与第二行的第一列合并(没有空格)。有人能帮忙吗 sed 'N;s/\n/ /' input.txt >> output.txt 输入: chr6 108930289 108930461 GWNJ-0842:521:GW1906282259th:8:1101:11373:39475:GCCAAGsize=1 HPV45 5328 5400 GWNJ-

我有一个无法解决的奇怪问题。我使用下面的bash脚本在unix上将两行合并在一起。但是,第一行的最后一列与第二行的第一列合并(没有空格)。有人能帮忙吗

sed 'N;s/\n/  /' input.txt >> output.txt
输入:

chr6    108930289   108930461   GWNJ-0842:521:GW1906282259th:8:1101:11373:39475:GCCAAGsize=1
HPV45   5328    5400    GWNJ-0842:521:GW1906282259th:8:1101:11373:39475:GCCAAGsize=1
chr3    153084969   153085002   GWNJ-0842:521:GW1906282259th:8:1101:14560:33322:GCCAATsize=6
HPV45   4014    4219    GWNJ-0842:521:GW1906282259th:8:1101:14560:33322:GCCAATsize=6
输出:(例如,HPV45附加到其前面的1)


您可以使用
awk
作为替代方案

此脚本保存每个奇数编号的输入行(从1开始),并为每个偶数编号的行打印保存的行(不带行分隔符)和当前行:

awk 'NR%2 {save=$0;}
!(NR%2) {print save,$0;}' input.txt >> output.txt
下一个脚本依赖于行首的模式
chr
HPV
,而不是使用行号:

awk '/^chr/ {save=$0;} 
/^HPV/ {print save,$0;}' input.txt >> output.txt
根据问题的输入,两个脚本都会生成以下输出:

chr6 108930289 108930461 GWNJ-0842:521:GW1906282259:8:1101:11373:39475:GCCAAGsize=1 HPV45 5328 5400 GWNJ-0842:521:GW1906282259:8:1101:11373:39475:GCCAAGsize=1
chr3 153084969 153085002 GWNJ-0842:521:GW1906282259:8:1101:14560:33322:GCCAATsize=6 HPV45 4014 4219 GWNJ-0842:521:GW1906282259:8:1101:14560:33322:GCCAATsize=6
备注:
如果总行数为奇数,基于行号的脚本将忽略最后一行。

如果输入不总是包含成对的匹配行,则基于模式的脚本将产生错误的结果。

您可以使用
awk

此脚本保存每个奇数编号的输入行(从1开始),并为每个偶数编号的行打印保存的行(不带行分隔符)和当前行:

awk 'NR%2 {save=$0;}
!(NR%2) {print save,$0;}' input.txt >> output.txt
下一个脚本依赖于行首的模式
chr
HPV
,而不是使用行号:

awk '/^chr/ {save=$0;} 
/^HPV/ {print save,$0;}' input.txt >> output.txt
根据问题的输入,两个脚本都会生成以下输出:

chr6 108930289 108930461 GWNJ-0842:521:GW1906282259:8:1101:11373:39475:GCCAAGsize=1 HPV45 5328 5400 GWNJ-0842:521:GW1906282259:8:1101:11373:39475:GCCAAGsize=1
chr3 153084969 153085002 GWNJ-0842:521:GW1906282259:8:1101:14560:33322:GCCAATsize=6 HPV45 4014 4219 GWNJ-0842:521:GW1906282259:8:1101:14560:33322:GCCAATsize=6
备注:
如果总行数为奇数,基于行号的脚本将忽略最后一行。


如果输入不总是包含成对的匹配行,则基于模式的脚本将产生错误的结果。

您好,谢谢您的评论。它不允许我附加txt文件。我从输入和输出中粘贴了几行。这有用吗?你试过sed'N;s/\r\n/'文件?你好,Oguz,谢谢回复。我尝试了这个,并在网上找到了几个不同的选择。第二行保留在第二行中,只有一个空格被添加到它之前。我能够真正合并这两行的唯一方法是使用代码,最终将文本合并在一起。如果您能想到其他任何东西,请让我知道,我会尝试一下。
od-c./input
显示了
size=1
HPV45
之间的内容?例如,当我使用您的示例输入运行它时,我看到
size=1\n hpv
Hi Seige,谢谢。是的,它也为输入文件显示了相同的内容。然而,在输出文件中,它显示了SIZE=1 H P VHi mevets,感谢您的评论。它不允许我附加txt文件。我从输入和输出中粘贴了几行。这有用吗?你试过sed'N;s/\r\n/'文件?你好,Oguz,谢谢回复。我尝试了这个,并在网上找到了几个不同的选择。第二行保留在第二行中,只有一个空格被添加到它之前。我能够真正合并这两行的唯一方法是使用代码,最终将文本合并在一起。如果您能想到其他任何东西,请让我知道,我会尝试一下。
od-c./input
显示了
size=1
HPV45
之间的内容?例如,当我使用您的示例输入运行它时,我看到
size=1\n hpv
Hi Seige,谢谢。是的,它也为输入文件显示了相同的内容。然而,在输出文件中,它显示了size=1hpvthanks!当我在仅复制上面发送的两行而生成的输出文件上运行此命令时,它对我不起作用。我正在使用Mac上的终端来做这件事,如果它改变了什么。这可能是Mac上使用分隔符的问题吗?问题是其他的awk代码对我也不起作用。@neginValizadegan“对我不起作用”的确切意思是什么?由于注释不是为此而设计的,请编辑您的问题,显示输入、您使用的确切命令以及结果输出。正如其他人已经写过的,您可能有错误或不一致的行尾引起的问题。请同时显示
od-c input.txt
od-c output.txt
的结果。如果您的文件长度超过几行,请使用类似于
head-4input.txt | od-c
的方法,这一个最终对我有效。不是为什么一开始没有。谢谢!:awk'NR%2{save=$0;}!(NR%2){打印保存,$0;}'input.txt>>output.txt谢谢!当我在仅复制上面发送的两行而生成的输出文件上运行此命令时,它对我不起作用。我正在使用Mac上的终端来做这件事,如果它改变了什么。这可能是Mac上使用分隔符的问题吗?问题是其他的awk代码对我也不起作用。@neginValizadegan“对我不起作用”的确切意思是什么?由于注释不是为此而设计的,请编辑您的问题,显示输入、您使用的确切命令以及结果输出。正如其他人已经写过的,您可能有错误或不一致的行尾引起的问题。请同时显示
od-c的结果