【发布时间】:2017-11-07 17:49:14
【问题描述】:
我有一个包含 2 列的文件,我想使用第二列中的值来设置 cut 命令中的范围以从另一个文件中选择一个字符范围。我想要的范围是第二列中值位置的字符加上接下来的 10 个字符。一会儿我会举个例子。
我的文件是这样的:
文件有 2 列,行间没有空行 (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
【问题讨论】:
-
第一个是个好问题。很清楚,也显示了努力。
-
记得接受答案。
标签: bash environment-variables cut