Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 重命名第一列以区分startsites脚本_Linux_Bash_Shell - Fatal编程技术网

Linux 重命名第一列以区分startsites脚本

Linux 重命名第一列以区分startsites脚本,linux,bash,shell,Linux,Bash,Shell,我正在寻找一种方法来转换文件,如下所示,称为输入到输出。文件输入由包含唯一ID、ID和值的列组成。我想根据作为区分的值将ID转换为单独的ID。我尝试了一些基本命令,但无法使其适用于主输入文件,该文件有20000行和15000个ID。 有没有人对如何处理这个问题有一些好的想法/建议 INPUT OUTPUT unique ID VALUE unique ID VALUE A1 GENEA 10 -> A1

我正在寻找一种方法来转换文件,如下所示,称为输入到输出。文件输入由包含唯一ID、ID和值的列组成。我想根据作为区分的值将ID转换为单独的ID。我尝试了一些基本命令,但无法使其适用于主输入文件,该文件有20000行和15000个ID。 有没有人对如何处理这个问题有一些好的想法/建议

       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的值第二高,等等。

这里有一个疯狂的单行程序:

head -1 file; tail -n+2 file| nl| sort -nrk4| awk '{ ++m[$3]; print($1" "$2" "$3"p"m[$3]" "$4); }'| 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
它包括按
列对文件进行排序,然后在
awk
中按顺序对其进行处理,在关联数组中计算每个不同的
ID
的出现次数,这样您就可以建立
p#
计数

补充说明:

  • 我将标题行(
    head-1
    )与数据行(
    tail-n+2
    )分开打印,因此主处理管道将仅应用于数据行

  • 我在初始的
    排序
    之前添加了对
    nl
    的调用,以捕获新的前导编号列中的原始行顺序,然后按该列排序(然后
    剪切该编号列)以返回原始顺序

  • 我在末尾将
    列-添加到“”
    以对齐数据行,不知道您是否需要。如果要将标题行与数据行对齐,可以将
    head
    语句和主管道用大括号括起来,并将
    列移动到带大括号的块外的“
    过滤器以对齐整个内容


您只是想在每个
ID
列值之后粘贴
p#
(每个ID都有连续的数字)?哦,对不起,忘了提及我希望它们根据值排序。其中p1的值最高,p2的值第二高,等等。哇,那些单行程序太棒了!我删除了“column-to”“;”,因为我遇到了错误:
column:invalid选项--“o”用法:column[-tx][c columns][s sep][file…]
但是如果没有它,它也可以正常工作!