You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中从文件第7行提取指定内容并赋值给变量?

问题:提取指定行中的特定字段作为变量值

我有一个内容如下的文件file.txt:

>ref_frame=1 
TPGIRYQYNVLPQGWKGSPAIFQSSMTKILEPFRKQNPDIVIYQYMDDLYVGSD
>ref_frame=2 
HQGLDISTMCFHRDGKDHQQYSKVA*QKS*SLLENKIQT*LSINTWMICM*DLT
>ref_frame=3 
TRD*ISVQCASTGMERITSNIPK*HDKNLRAF*KTKSRHSYLSIHG*FVCRI*
>test_3_2960_3_frame=1 
TPGIRYQYNVLPQGWKGSPAIFQSSMTKILEPSRKQNPDIVIYQYMDDLYVGSD

我需要在Bash中给变量赋值,执行echo $variable时输出test_3_2960。目标内容固定在第7行,目前使用的命令是:

variable=`cat file.txt | awk 'NR==7'`

执行后输出结果为>test_3_2960_3_frame=1,请问该如何实现需求?


解决方案

方法1:用awk直接完成定位与提取

可以在awk中一步完成行选择和字段提取,同时避免无用的cat管道:

variable=$(awk 'NR==7 {sub(/^>/, ""); split($0, arr, /[_=]/); print arr[1]"_"arr[2]"_"arr[3]}' file.txt)
  • NR==7:定位到第7行
  • sub(/^>/, ""):移除行首的>符号
  • split($0, arr, /[_=]/):用_和=作为分隔符拆分字符串为数组,此时arr[1]为test、arr[2]为3、arr[3]为2960
  • 最后拼接并打印目标字符串

方法2:结合sed与cut处理

先用sed定位行并移除>,再用cut分割提取指定字段:

variable=$(sed -n '7s/^>//p' file.txt | cut -d'_' -f1-3)
  • sed -n '7s/^>//p':仅处理第7行,替换行首的>并打印该行内容
  • cut -d'_' -f1-3:以_为分隔符,提取前3个字段,拼接后即为test_3_2960

方法3:纯Bash内置命令处理(无需外部工具)

如果不想依赖awk/sed,可使用Bash原生字符串操作:

line=$(sed -n '7p' file.txt)
variable=${line#>}          # 移除字符串开头的>
variable=${variable%_*_*}   # 从末尾删除最后两个_及其后续内容
  • ${line#>}:删除字符串开头的>字符
  • ${variable%_*_*}:从字符串末尾匹配并删除_*_*(即最后两个下划线及之后的所有内容)

内容的提问来源于stack exchange,提问作者SaltedPork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:01:33