有条件地将两行合并为一行
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
如果在 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
- 打印模式的第一部分 spaceD
- 删除模式的第一部分 space