gpt4 book ai didi

linux - 排序文件并将它们放在不同的文件中

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:16 24 4
gpt4 key购买 nike

我正在尝试对具有不同基因组区域的文件进行排序,并且每个区域本身都有一个字母和数字组合。

我想根据每个基因组位置 (columns1,2,3) 对整个文件进行排序,如果这 3 个相同,并将其提取到一个新的单独文件中。

我的输入是:

1.txt
chr1 10 20 . . 00000 ACTGBACA
chr1 10 20 . + 11111 AACCCCHQ
chr1 18 40 . . 0 AA12KCCHQ
chr7 22 23 . . 21 KLJMWQKD
chr7 22 23 . . 8 XJKFIRHFBF24
chrX 199 201 . . KK AVJI24

我期待的是:

chr1.10-20.txt
chr1 10 20 ACTGBACA
chr1 10 20 AACCCCHQ


chr1.18-40.txt
chr1 18 40 AA12KCCHQ

chr7.22-23.txt
chr7 22 23 KLJMWQKD
chr7 22 23 XJKFIRHFBF24

chrX.199-201.txt
chrX 199 201 AVJI24

我正在尝试使用 awk 拆分文档,但这不是我想要做的。

awk -F, '{print > $1$2$3".txt"}' 1.txt

它为我提供了所有行的文件名,在文件内部,它又是整行,即使我只需要第 1、2、3 和 7 列。

>ls
1.txt
chr1 10 20 . + 11111 AACCCCHQ.txt
chr7 22 23 . . 21 KLJMWQKD.txt
chrX 199 201 . . KK AVJI24.txt
chr1 10 20 . . 00000 ACTGBACA.txt
chr1 18 40 . . 0 AA12KCCHQ.txt
chr7 22 23 . . 8 XJKFIRHFBF24.txt

>cat chr1\ \ \ \ 10\ \ 20\ .\ +\ 11111\ AACCCCHQ.txt
chr1 10 20 . + 11111 AACCCCHQ

如果您能告诉我如何修复文件名及其内容,我将不胜感激。

最佳答案

看看这个:

#!/bin/sh
INPUT="$1"

while read -r LINE; do
GEN_LOC="$(echo "$LINE" | tr -s ' ' '.' | cut -d '.' -f 1,2,3)"
echo "$LINE" | tr -s ' ' | cut -d ' ' -f 1,2,3,6,7 >> "${GEN_LOC}.txt"
done < "$INPUT"

此脚本将采用您发布的格式获取输入文件并逐行读取。对于每一行,它会将额外的空格替换为文件名的点,并将其缩减为字段 1、2 和 3(将其存储在 $GEN_LOC 变量中)。然后,它将整个 $LINE 附加到名为 ${GEN_LOC}.txt 的文件中。如果有多行最终输出到相同的文件名,那很好——该行将只是附加。这不考虑以前的运行,因此如果您运行两次,它将不断附加到现有文件。希望这对您有所帮助!

关于linux - 排序文件并将它们放在不同的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com