有条件地将两行合并为一行

Conditionally Merging two lines into one line

如果在 Unix 终端中满足特定条件,我如何合并两行?

我有这样的数据:

A1
B1
A2
B2
A3
A4
A5
B5

我想合并成这样:

A1, B1
A2, B2
A3,
A4,
A5, B5

真实数据是这样的:

"224222" 
<Frequency freq="0.136" allele="T" sampleSize="5008"/>
"224223" 
<Frequency freq="0.3864" allele="T" sampleSize="5008"/>
"224224" 
"224225" 
<Frequency freq="0.3894" allele="G" sampleSize="5008"/>
"1801179" 
"1861759"

我实际上试图在 "A" 数据之前添加虚拟分隔符文本来分隔它们。但我无法实现它。

可以使用 awk getline:
awk '{ if(condition){ if((getline var)>0) print [=10=]","$var; else print [=10=]; } else print [=10=];}' <file>

使用sed

sed 's/$/, /;N;/\n<Freq/{s/\n//};P;D' <file>

解释:

  • s/$/, / - 在当前行添加一个逗号
  • N - 获取下一行
  • /\n<Freq/{s/\n//} - 如果第二行包含<Freq,删除换行符
  • P - 打印模式的第一部分 space
  • D - 删除模式的第一部分 space