perl - 将文件的所有单独段落放在单独的行中

标签 perl sed text-manipulation

我有一个包含序列数据的文件,其中每个新段落(由两个空行分隔)包含一个新序列:

#example

ASDHJDJJDMFFMF
AKAKJSJSJSL---
SMSM-....SKSKK
....SK


SKJHDDSNLDJSCC
AK..SJSJSL--HG
AHSM---..SKSKK
-.-GHH

我想最终得到一个如下所示的文件:
ASDHJDJJDMFFMFAKAKJSJSJSL---SMSM-....SKSKK....SK
SKJHDDSNLDJSCCAK..SJSJSL--HGAHSM---..SKSKK-.-GHH

每个序列的长度相同(如果有帮助)。

我还希望对存储在不同目录中的多个文件执行此操作。

我刚试过
sed -e '/./{H;$!d;}' -e 'x;/regex/!d' ./text.txt

然而这只是删除了整个文件:S

任何帮助将不胜感激 - 不必在 sed 中,如果您知道如何在 perl 或其他东西中做到这一点,那也很棒。

谢谢。

最佳答案

您需要做的就是将每个字段由换行符分隔的空行分隔记录 (RS) 文件转换为每个字段都没有任何分隔 (OFS) 的换行分隔记录文件。只需设置适当的 awk 变量并重新编译记录:

$ awk '{$1=$1}1' RS= OFS= file
ASDHJDJJDMFFMFAKAKJSJSJSL---SMSM-....SKSKK....SK
SKJHDDSNLDJSCCAK..SJSJSL--HGAHSM---..SKSKK-.-GHH

关于perl - 将文件的所有单独段落放在单独的行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13971812/

相关文章:

linux - 如何按名称而不是按固定列从类似 JSON 的文本中提取字段?

perl - 使用 Perl 检查 cookie

perl - 在Perl中'eq'和'=〜'有什么区别?

perl - 如何仅使用标准 Perl 库发出 HTTP POST 请求?

c - 使用perl根据文件名+行号提取一行C代码

linux - 使用 sed 在特定行插入状态

unix - 使用sed删除文件的所有内容

bash - 使用 Bash 在特定行之前插入多行文本

python - 将没有换行符的字符串拆分为具有最大列数的行列表

python - Bash/python/perl 神奇地获取多个日志文件中的聚合日期时间