gpt4 book ai didi

awk - Awk:如何每四行替换一个字符串?

转载 作者:行者123 更新时间:2023-12-04 15:56:28 27 4
gpt4 key购买 nike

我有一个文件,其中每四行是这样的:

  HISEQ15:454:D27KKACXX:6:2316:16241:100283 1:N:0:GTTTCG 


(对于那些感兴趣的人,此文件包含DNA序列)

我需要删除空格后的所有内容,除了空格后的第一个数字(在本例中为 1),然后在字符串的开头和数字之间插入 /,因此得到以下信息:

  HISEQ15:454:D27KKACXX:6:2316:16241:100283/1


我只知道Perl,而我的文件> 10GB可能会永久占用它,因此希望您能对awk有所帮助。

最佳答案

那这个呢?

awk 'BEGIN{OFS="/"} NR%4==1{$2=$2*1}1' file


使用 NR%4==1,我们得到所有的行号均为4K + 1。在这些行中,我们执行 {$2=$2*1},即将空格后的第二部分转换为仅数字。然后使用 {}1打印所有行。
为了使记录由“ /”分隔,我们使用 BEGIN{OFS="/"}部分,因为OFS代表“输出字段分隔符”。

注意,条件 NR%4==1可以根据要改变的字符串的位置而改变。如果是第1,第5,第9 ...就可以了。如果是第二,第六...则 NR%4==2,依此类推。

测试

$ cat a
HISEQ15:454:D27KKACXX:6:2316:16241:100283 1:N:0:GTTTCG
a
b
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283 7:N:0:GTTTCG
ad
f
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283 9:N:0:GTTTCG
$ awk 'BEGIN{OFS="/"}NR%4==1{$2=$2*1}5' a
HISEQ15:454:D27KKACXX:6:2316:16241:100283/1
a
b
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283/7
ad
f
d
HISEQ15:454:D27KKACXX:6:2316:16241:100283/9

关于awk - Awk:如何每四行替换一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com