重命名第一列以区分 startsites 脚本
Renaming first column to distinguish between startsites script
我正在寻找一种将文件转换为 INPUT 的方法,如下所示。文件 INPUT 由包含唯一 ID、ID 和值的列组成。我想根据作为区别的值将 ID 转换为分隔的 ID。我尝试了一些基本命令,但无法使其适用于 20,000 行和 15,000 个 ID 的主输入文件。
有没有人有一些好的ideas/suggestions如何处理这个问题?
INPUT OUTPUT
unique ID VALUE unique ID VALUE
A1 GENEA 10 -> A1 GENEAp1 10
A2 GENEA 5 -> A2 GENEAp2 5
A3 GENEA 2 -> A3 GENEAp3 2
A4 GENEB 4 -> A4 GENEBp4 4
A5 GENEB 5 -> A5 GENEBp3 5
A6 GENEB 8 -> A6 GENEBp2 8
A7 GENEB 70 -> A7 GENEBp1 70
A8 GENEC 5 -> A8 GENECp1 5
A9 GENED 50 -> A9 GENEDp2 50
A10 GENED 10 -> A10 GENEDp3 10
最好根据值对p进行编号。 p1 具有最高值,p2 第二高等
这是一个疯狂的 one-liner:
head -1 file; tail -n+2 file| nl| sort -nrk4| awk '{ ++m[]; print(" "" ""p"m[]" "); }'| sort -n| cut -d' ' -f2-4| column -to' ';
输出:
unique ID VALUE
A1 GENEAp1 10
A2 GENEAp2 5
A3 GENEAp3 2
A4 GENEBp4 4
A5 GENEBp3 5
A6 GENEBp2 8
A7 GENEBp1 70
A8 GENECp1 5
A9 GENEDp1 50
A10 GENEDp2 10
它涉及按 VALUE
列对文件进行排序,然后在 awk
中按顺序处理它,计算关联数组中每个不同 ID
的出现次数,因此您可以构建增加 p#
计数。
补充说明:
我将 header 行 (head -1
) 与数据行 (tail -n+2
) 分开打印,因此主处理管道仅适用于数据行.
我在初始 sort
之前添加了对 nl
的调用,以在新的前导编号列中捕获原始行顺序,然后按该列排序(和然后 cut
出那个编号列)到 return 到原始顺序。
我在最后加了column -to' '
对齐数据线,不知道你是不是want/need。如果要将 header 行与数据行对齐,可以用大括号将 head
语句和主管道包围起来,并将 column -to' '
过滤器移到大括号外以对齐整件事。
我正在寻找一种将文件转换为 INPUT 的方法,如下所示。文件 INPUT 由包含唯一 ID、ID 和值的列组成。我想根据作为区别的值将 ID 转换为分隔的 ID。我尝试了一些基本命令,但无法使其适用于 20,000 行和 15,000 个 ID 的主输入文件。 有没有人有一些好的ideas/suggestions如何处理这个问题?
INPUT OUTPUT
unique ID VALUE unique ID VALUE
A1 GENEA 10 -> A1 GENEAp1 10
A2 GENEA 5 -> A2 GENEAp2 5
A3 GENEA 2 -> A3 GENEAp3 2
A4 GENEB 4 -> A4 GENEBp4 4
A5 GENEB 5 -> A5 GENEBp3 5
A6 GENEB 8 -> A6 GENEBp2 8
A7 GENEB 70 -> A7 GENEBp1 70
A8 GENEC 5 -> A8 GENECp1 5
A9 GENED 50 -> A9 GENEDp2 50
A10 GENED 10 -> A10 GENEDp3 10
最好根据值对p进行编号。 p1 具有最高值,p2 第二高等
这是一个疯狂的 one-liner:
head -1 file; tail -n+2 file| nl| sort -nrk4| awk '{ ++m[]; print(" "" ""p"m[]" "); }'| sort -n| cut -d' ' -f2-4| column -to' ';
输出:
unique ID VALUE
A1 GENEAp1 10
A2 GENEAp2 5
A3 GENEAp3 2
A4 GENEBp4 4
A5 GENEBp3 5
A6 GENEBp2 8
A7 GENEBp1 70
A8 GENECp1 5
A9 GENEDp1 50
A10 GENEDp2 10
它涉及按 VALUE
列对文件进行排序,然后在 awk
中按顺序处理它,计算关联数组中每个不同 ID
的出现次数,因此您可以构建增加 p#
计数。
补充说明:
我将 header 行 (
head -1
) 与数据行 (tail -n+2
) 分开打印,因此主处理管道仅适用于数据行.我在初始
sort
之前添加了对nl
的调用,以在新的前导编号列中捕获原始行顺序,然后按该列排序(和然后cut
出那个编号列)到 return 到原始顺序。我在最后加了
column -to' '
对齐数据线,不知道你是不是want/need。如果要将 header 行与数据行对齐,可以用大括号将head
语句和主管道包围起来,并将column -to' '
过滤器移到大括号外以对齐整件事。