gpt4 book ai didi

linux - 为简单的 awk 命令写一个 for 循环 (linux)

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:56 24 4
gpt4 key购买 nike

问题:我试图在一个文件(物种)中找到多个特定行,然后只将每个物种名称后的第 5 行打印到一个新文件中。我可以单独为每个物种做这件事,但我无法循环遍历文档中的 1000 个物种中的每一个。例如:

awk 'c&&!--c;/species_1$/{c=5}' results.out > speciesnames

我怎样才能使这个命令成为一个循环,以便它执行以下操作(遍历文件中的每个物种):

物种 1,打印第 5 行以记录标题为物种名称的文件

物种 2,打印第 5 行以记录标题为物种名称的文件

物种 n,打印第 5 行以记录标题为物种名称的文件

如有任何帮助,我们将不胜感激。我对循环的经验很少。谢谢

results.out 中的数据结构示例:

Query= species_1

length=341
Score
bits
Line 5, relevant info
description
description
description
description
description
description
description
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
nucleotides
data
data
data
data
data
data

Query= species_2

length=341

.......

期望输出到文件 speciesnames 中:

Line 5, relevant info for species 1
Line 5, relevant info for species 2
Line 5, relevant info for species n

最佳答案

可能是这样的:

awk 'c&&!--c;/species_[0-9]+$/{c=5}' file

awk '/species_[0-9]+/{a[NR+5]} {b[NR]=$0} END {for (i in a) print b[i]}' file

这将在 species 命中后打印所有第 5 行。
awkarray 的输出是随机的。

新输入后调整代码:

awk 'c&&!--c;/species [0-9]+$/{c=4}' file
Line 5, relevent info

species和number之间没有_,只有一个空格。
您喜欢命中后的 4 行,而不是 5


示例数据:

cat file
Query= species 1
length=341
Score
bits
Line 5, relevent info
description
description
description
description
description
description
Query= species 5
length=341
Score
bits
Line 5, relevent info need this
description
description
description
description
description
Query= species 8
length=341
Score
bits
Line 5, relevent info more data
description
description
description
description
description
Query= species 6423
length=341
Score
bits
Line 5, relevent infom, yes here it is
description
description
description
description
description

awk 'c&&!--c {print i " --> " $0} /species [0-9]+$/{c=4;i=$2 FS $3}' file
species 1 --> Line 5, relevent info
species 5 --> Line 5, relevent info need this
species 8 --> Line 5, relevent info more data
species 6423 --> Line 5, relevent infom, yes here it is

最终解决方案:

awk 'c&&!--c;/species_/{c=5}' file

关于linux - 为简单的 awk 命令写一个 for 循环 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514312/

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