首先,我需要通过file.txt中的已知位置提取子字符串
bash中file.txt
,但从第二行开始
>header
cgatgcgctctgtgcgtgcgtgcg
所以让我们假设我想要第二行的位置10
,输出应该是:
c
第二,我希望包含周围的±5
字符,从而产生
gcgctctgtgc
答案 0 :(得分:2)
{ read -r; read -r; echo "${REPLY:9:1}"; echo "${REPLY:4:11}"; } < file.txt
输出:
c
gcgctctgtgc
子字符串的${parameter:offset:length}
语法在https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion中解释。
https://www.gnu.org/software/bash/manual/bashref.html#index-read中解释了read
命令。
输入重定向:https://www.gnu.org/software/bash/manual/bashref.html#Redirections。
答案 1 :(得分:1)
使用sed和cut:
sed -n '2p' file|cut -c 5-15
sed for access 2nd line and cut for print desired characters
答案 2 :(得分:1)
使用awk
:
要获得位置10的字符,1索引:
awk 'NR==2 {print substr($0, 10, 1)}'
NR==2
正在检查记录是否为秒,如果是,{}
内的语句将被执行
substr($0, 10, 1)
将从字段$0
(整个记录)中的位置10开始提取1个字符,即仅提取第10个字符。 substr()
的格式为substr(field, offset, length)
。
同样,要在10周左右获得±5个字符:
awk 'NR==2 {print substr($0, (10-5), 11)}'
(10-5)
代替5
只是为了让您了解这些内容。
示例:强>
% cat file.txt
>header
cgatgcgctctgtgcgtgcgtgcg
% awk 'NR==2 {print substr($0, 10, 1)}' file.txt
c
% awk 'NR==2 {print substr($0, (10-5), 11)}' file.txt
gcgctctgtgc