小编Sil*_*sti的帖子

每个第i个字符打印子字符串

我有一些文件想以“滑动窗口”的方式分为子字符串,增量为1个字符。这些文件每个只有一行,我可以这样打印子字符串:

input="file.txt"
awk '{print substr($1,1,21)}' $input


awk '{print substr($1,2,21)}' $input
Run Code Online (Sandbox Code Playgroud)

这分别给了我以下输出。

AATAAGGTGCCTGATTAAA-G   
ATAAGGTGCCTGATTAAA-GG
Run Code Online (Sandbox Code Playgroud)

输入文件包含约17,000个字符,我设法尝试执行for循环以计算字符并在for循环内尝试上述命令,如下所示:

count=`wc -c ${input} |cut -d' ' -f1`
for num in `seq ${count}`
   do
awk '{print substr($1,$num,21)}' $input
   done
Run Code Online (Sandbox Code Playgroud)

但这将返回空输出。我还想将其作为bash脚本运行,并在命令行中指定输入和子字符串以及输出文件的大小,例如:

script.sh input_file.txt 21 output.txt
Run Code Online (Sandbox Code Playgroud)

我尝试过,但是也没有用。

  input=$1
  kmer=$2
  output=$3
  count=`wc -c ${input} |cut -d' ' -f1`
  for num in `seq ${count}`
    do
 awk '{print substr($1,$num,$kmer)}' $input > $output
  done
Run Code Online (Sandbox Code Playgroud)

关于我在做什么错的任何提示?我对awk很陌生...

bash awk substr

5
推荐指数
1
解决办法
360
查看次数

从数字列表中创建范围

我有一个这样的数字列表:

28
57
87
116
145
176
204
233
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为带有名称的范围,基本上,每个范围对应于第一个数字,直到下一个数字-1.像这样:

type, range1=28-56
type, range2=57-86
type, range3=87-115
type, range4=116-144
type, range5=145-175
type, range6=176-203
type, range7=204-232
Run Code Online (Sandbox Code Playgroud)

关于如何做的任何想法?

bash awk sed

1
推荐指数
1
解决办法
45
查看次数

标签 统计

awk ×2

bash ×2

sed ×1

substr ×1