我是bash的新手,需要帮助将第2行向前从一个文件复制到另一个文件中的特定位置(150个字符)。通过浏览论坛,我找到了一种方法来包含此位置列出的特定文本:
sed -i's / ^(。{150})/ \ 1specifictextlisted /'destinationfile.txt
但是,我似乎找不到一种将内容从一个文件复制到其中的方法。
基本上,我正在使用这两个起始文件,并且需要以下输出:
文件1的内容:
序列
AAAAAAAAAGGGGGGGGGGGCCCCCCCCTTTTTTTTTT
文件2的内容:
chr2
tccccagcccagccccggccccatccccagcccagcctatccccagcccagcctatccccagcccagccccggccccagccccagccccggccccagccccagccccggccccagccccggccccatccccggccccggccccatccccggccccggccccggccccggccccggccccatccccagcccagccccagccccatccccagcccagccccggcccagccccagcccagccccagccacagcccagccccggccccagccccggcccaggcccagcccca
所需的输出内容:
chr2 tccccagcccagccccggccccatccccagcccagcctatccccagcccagcctatccccagcccagccccggccccagccccagccccggccccagccccagccccggccccagccccggccccatccccggccccggccccatccccgAAAAAAAAAGGGGGGGGGGGCCCCCCCCCTTTTTTTTTgccccggccccggccccggccccggccccatccccagcccagccccagccccatccccagcccagccccggcccagccccagcccagccccagccacagcccagccccggccccagccccggcccaggcccagcccca
有人可以让我走上正确的道路吗?
答案 0 :(得分:1)
您可以使用awk
:
awk 'NR==FNR{a=$2;next}{print $1, substr($2, 0, 149) "" a "" substr($2, 150)}' file1 file2
说明:
# Total row number == row number in file
# This is only true when processing file1
NR==FNR {
a=$2 # store column 2 in a variable 'a'
next # do not process the block below
}
# Because of the 'next' statement above, this
# block gets only executed for file2
{
# put 'a' in the middle of the second column and print it
print $1, substr($2, 0, 149) "" a "" substr($2, 150)
}
我假设两个文件都只包含一行,就像您的示例一样。
编辑:在评论中,您说过文件实际上分散了两行,在这种情况下,您可以使用以下awk脚本:
# usage: awk -f this_file.awk file1 file2
# True for the second line in each file
FNR==2 {
# Total line number equals line number in file
# This is only true while we are processing file1
if(NR==FNR) {
insert=$0 # Store the string to be inserted in a variable
} else {
# Insert the string in file1
# Assigning to $0 will modify the current line
$0 = substr($0, 0, 149) "" insert "" substr($0, 150)
}
}
# Print lines of file2 (line 2 has been modified above)
NR!=FNR
答案 1 :(得分:1)
如果文件确实很大,而不是327个字符,则可能要使用dd:
dd if=chr2 bs=1 count=150 status=none of=destinationfile.txt
tr -d '\n' < Sequence >> destinationfile.txt
dd if=chr2 bs=1 skip=150 seek=189 status=none of=destinationfile.txt
189为150+ Sequence
的长度。
答案 2 :(得分:0)
您可以使用bash并一次从文件中读取一个字符:
i=1
while read -n 1 -r; do
echo -n "$REPLY"
let i++
if [ $i -eq 150 ]; then
echo -n "AAAAAAAAAGGGGGGGGGGGCCCCCCCCCTTTTTTTTT"
fi
done < chr2 > destinationfile.txt
这只是读取一个字符,回显它并增加计数器。如果计数器为150,它将回显您的序列。您可以将回声替换为cat file | tr -d '\n'
。只需确保删除所有换行符即可,例如此处tr
。这就是为什么我使用echo -n
而不添加任何内容的原因。