我有一个文件,其第二行的长度不等。我想让这些行相等(每个第二行输出应该等于10个字符)但是使用新的标识符(每个奇数行)。
文件 - >
>ZQMK36301EDYQE
ZHZHHEXZZHHZZHHZZXHHHEHHHZZZHHHZHXZHZ
>ZQMK36301EEMJ9
ZZZXHZHHXHHHEZZEEZZHZZZZXEZ
>ZQMK36301EOEM5
ZXHXHZZHEHHHXZEZHXXXHXHHHHXEHHHZHHHH
desired output ->
>ZQMK36301EDYQE
ZHZHHEXZZH
>ZQMK36301EDYQE#2
HZZHHZZXHH
>ZQMK36301EDYQE#3
HEHHHZZZHH
>ZQMK36301EEMJ9
ZZZXHZHHXH
>ZQMK36301EEMJ9#2
HHEZZEEZZH
>ZQMK36301EOEM5
ZXHXHZZHEH
>ZQMK36301EOEM5#2
HHXZEZHXXX
>ZQMK36301EOEM5#3
HXHHHHXEHH
这里,如果我们取第一行是标识符(> ZQMK36301EDYQE),在第二行中它包含37个字符。现在它将生成3个相等长度的序列(i:e 10),如果剩余的字符小于10,我们将抛出该部分。现在,每个等长的新行都有一个标识符,它与序列的一部分相同,后跟“#”和数字。我想为整个文件做这个。请帮忙。
谢谢和致以诚挚的问候, 维卡斯
答案 0 :(得分:1)
作为一个单行:
perl -nwle '
$i=0;
for my $add (<>=~/.{10}/g) {
printf "%s%s\n%s\n", $_, $i++ ? "#$i":"", $add;
}' inputfile
-n
逐行读取文件并在$_
中存储行。 -l
自动输入输入。我们假设第一行是标题,第二行是数据。 $i
是计数器,因此每个新线对都会重置。 for
循环列表是通过读取一行<>
,然后使用正则表达式从中提取10个字符的长字符串而动态制作的。然后我们只打印东西,并确保不显示零计数器。