我有一些文件想以“滑动窗口”的方式分为子字符串,增量为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很陌生...
我有一个这样的数字列表:
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)
关于如何做的任何想法?