我有一个包含2列的文件,我想使用第二列的值来设置cut命令中的范围,以选择另一个文件中的一系列字符。我所需的范围是第二列中的值所在位置的字符及其后面的10个字符。稍后我会举个例子。
我的文件大致如下:
两列之间没有空行(file1.txt):
生成的文件将包含来自第一个文件的第二列中的值设置的起始点,每个范围在新行中的字符从10-20、25-35、48-58和66-76。因此,它将始终保持10的范围,但在不同的起始点上。我尝试了以下命令:
我的文件大致如下:
两列之间没有空行(file1.txt):
NAME1 10
NAME2 25
NAME3 48
NAME4 66
要提取变量范围的字符文件(只有一行非常长的无空格和无粗体字)(file2.txt):
GATCGAGCGGGATTCTTTTTTTTTAGGCGAGTCAGCTAGCATCAGCTACGAGAGGCGAGGGCGGGCTATCACGACTACGACTACGACTACAGCATCAGCATCAGCGCACTAGAGCGAGGCTAGCTAGCTACGACTACGATCAGCATCGCACATCGACTACGATCAGCATCAGCTACGCATCGAAGAGAGAGC
......或更直接地(复制/粘贴测试):
GATCGAGCGGGATTCTTTTTTTTTAGGCGAGTCAGCTAGCATCAGCTACGAGAGGCGAGGGCGGGCTATCACGACTACGACTACGACTACAGCATCAGCATCAGCGCACTAGAGCGAGGCTAGCTAGCTACGACTACGATCAGCATCGCACATCGACTACGATCAGCATCAGCTACGCATCGAAGAGAGAGC
期望的结果文件,每行一个序列 (result.txt):
GATTCTTTTT
GGCGAGTCAG
CGAGAGGCGA
TATCACGACT
生成的文件将包含来自第一个文件的第二列中的值设置的起始点,每个范围在新行中的字符从10-20、25-35、48-58和66-76。因此,它将始终保持10的范围,但在不同的起始点上。我尝试了以下命令:
for i in $(awk '{print $2}' file1.txt);
do
p1=$i;
p2=`expr "$1" + 10`
cut -c$p1-$2 file2.txt > result.txt;
done
我没有得到任何输出或错误信息。
我也尝试过:
while read line; do
set $line
p2=`expr "$2" + 10`
cut -c$2-$p2 file2.txt > result.txt;
done <file1.txt
最后这个命令给了我一个错误信息:
cut: invalid range with no endpoint: -
Try 'cut --help' for more information.
expr: non-integer argument