我想相当难写一个脚本,“loopingly”从一个文件中提取子提取子,同时获得该信息所在从另一个文件中删除。我在MobaXterm工作。我有一个文件cut_positions.txt,这是制表符分隔和显示名称,起点,终点,长度,评论:如何使用的子位置信息从一个文件到另一个文件(循环,bash)的
k141_20066 103484 104617 1133 phnW
k141_20841 13200 14324 1124 phnW
k141_23852 69 452 383 phnW
k141_32328 1 180 179 phnW
,并与名称string_file.txt(这将是没有问题的删除/在其中一个文件)和字符串(原字符串是很长的,达1.000.000字符)添加“>”:
>k141_10671 CCTTCCCCCACACGCCGCTCTTCCGCTCTTGCTGGCC
>k141_10707 AGGCGGTATCAGACCTTGCCGCAACACTAAGCCCAGTAACGCTGTCGCCCTTATATCTGA
>k141_11190 CTTTTGTGACAGTGCAGGGCAATGGTGGATTTATCAGTATCGGGCAGAA
>k141_1479 AGCCGACAGCAGCGCCGAGGGCACATAATCCGATGACACGATGTCCAAAAGATCCGCCTCGGC
现在我想用从cut_positions.txt输入。我想使用的第一列,以匹配行权,那么第二列的子串的起点和第四列的子串的长度。这应该使用cut_positions.txt中的所有行并写入新的out.txt。为了更接近我尝试过(与我的原始数据):
➤ grep ">k141_28027\b" test_out_one_line.txt | awk '{print substr($2,57251,69)}'
TCACTTGAGCGCAATTATTCGCTCTCCGGCGGCGTCAGCATCAGCCTGATCATGCGTCACCAAAAGTGT
其中手工制作的方式很好。我想通了,以及如何访问cut_positions.txt的不同元素(这里的第一行中的第二列):
awk -F '\t' 'NR==1{print $2}' cut_positions.txt
,但我无法弄清楚如何把它变成一个循环,因为我不知道如何在不同的重定向,管道等步骤连接上,我使用的小步骤。任何帮助是非常赞赏(并告诉我,如果你需要更多的样本数据)
感谢 crazysantaclaus
非常感谢,但我真的不知道它是如何工作......我只是跑了一个小的子样本,这让我从剩下的琴弦strings.txt?我很抱歉,如果我没有正确使用它,但我需要的是从strings.txt中提取的子字符串。我也应该说,这两个文件在第一列方面不尽相同。我有pos.txt(可能是1000行)从strings.txt(100.000行)中获得匹配的子字符串,因此我的试验中出现了怪异的grep部分。不便之处! – crazysantaclaus
我明白了。更新了答案。 – hek2mgl
嘿hek2mgl,这真的很接近(我猜),但遗憾的是还没有。我担心我在这里使用的术语不对?当我说“但我需要的是从strings.txt中提取的子字符串”我的意思是与你的输出完全相反......所以我对你摆脱的那部分感兴趣......不是那个子?顺便说一句:在输出中显示字符串前的名称是完美的,但如果这使得事情变得复杂(更多的话他们已经是),我想我也可以将它后面的名称与pos.txt合并。 – crazysantaclaus