我有大约80个前3列的床文件(例如:X2_example.bed,其中X2是基因名),我想添加第4列的基因名并重命名文件(附例:X2_eexample_edited.bed、Y2_example_edited.ded等..),然后将这些文件合并在一起创建1个床文件。
我可以添加带有基因名称的第4列,并用代码用不同的名称保存文件
sed 's/$/tX2/' < X2_example.bed > X2_example_edited.bed
这是生成的床文件
chr17 42276210 42276219 X2
chr17 42297938 42297947 X2
chr17 42276210 42276219 X2
chr17 42297938 42297947 X2
但我必须为每个床档案单独做这件事。这是一种我可以从文件名中提取基因名的方法(例如,X2_example.dbed中的X2),然后将其添加到bed文件的第4列,并将其保存为X2_example_edited.dbed。
我可以从文件名中提取基因名echo "X2_example.bed" | awk -F'[_.]' '{print $1}
然而,由于我有太多的文件,我正在寻找一种方法来生成一个循环来自动化这一过程。
此外,我需要合并所有生成的床文件,我可以通过完成
cat *_edited.bed >output.bed
然而,我遇到了一个错误(见附件示例:output.bed),第一个文件的最后一行和下一个文件的第一行在同一行。
chr3 18467066 18467075 Y2
chr17 42276210 42276219 X2
我知道这一定是一件非常基本的事情,但我对这一分析很陌生,而且知识有限。提前感谢
您可以尝试使用awk
for file in *.bed; do
awk '{split(FILENAME,a,"_"); print $0, a[1]}' "$file"
done > output.bed.all