【发布时间】:2017-03-11 23:01:45
【问题描述】:
我想对包含数千行的文本文件执行以下操作
- 在以
B开头的行处拆分文件(但不包括此行)。 - 包括每个拆分文件中存在的行数作为标题 + 附加文本(即
<number of lines> " 120") - 删除每行开头的符号(即
>)
我已尝试使用以下代码来拆分文件,但文件中存在的行数(如NR-1 " 120")是累积的,它打印在拆分文件的最后而不是一开始。
awk '/^B/{n++; print NR-1 " 120" > filename;close(filename);next}{filename = "part" n ".txt"; print >filename}'
在尝试将其打印为标题时,我使用了以下代码。但假定的标题根本没有出现。
awk 'BEGIN{print NR-1 " 120" > filename}; /^B/{n++;close(filename);next};{filename = "part" n ".txt"; print >filename}' inputfile.txt
上面的代码会出现以下错误:
awk: null file name in print or getline
source line number 1
我的文本文件类似于:
>L1212 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L1222 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L1232 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
B * - |1|
>L4212 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4312 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4412 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4512 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
B * - |2|
>L4212 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4312 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4412 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4512 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4312 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4412 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
>L4512 ATCTATCTTCTATCTGTTAGCTAGCTAGCTA
B * - |3|
更新:
在不使用 Mawk 或 GNU awk 的情况下通过 @mklement0 使用脚本的回旋处,我在 textwrangler 中使用 grep 将所有以 B 开头的行更改为单个字符 ~。
【问题讨论】: