已知表格1中内容为:
Pangenome_ALLmerge MGAL10B.pep Orthogroup
HT_HIFI_Bat0035260.1 MGAL_10B003480P1 OG0000006
HT_HIFI_Bat0035260.1 MGAL_10B093273P1 OG0000006
HT_HIFI_Bat0035260.1 MGAL_10B093316P1 OG0000006
HT_HIFI_Bat0035260.1 MGAL_10B093328P1 OG0000006
HT_HIFI_Bat0035260.1 MGAL_10B093379P1 OG0000006
表格2中内容为:
Seq Name GO Seq Description Level
HT_HIFI_Bat0000010.1 GO:0016020 Hypothetical predicted protein 3
HT_HIFI_Bat0000010.1 GO:0031224 Hypothetical predicted protein 4
HT_HIFI_Bat0000010.1 GO:0005575 Hypothetical predicted protein 1
HT_HIFI_Bat0000010.1 GO:0110165 Hypothetical predicted protein 2
已知第一个表格中第一列和最后一列内容中每一行都互相对应,需求是,使用awk在表格2中插入1列,要求插入列的内容和第一个表格的最后一列互相对应,列名称为OG。表格2中原有列都保留。表格列之间都以\t分割。
实现:
awk 'BEGIN{FS=OFS="\t"} FNR==1{print $0, "OG"; next} FNR==NR{og[$1]=$3; next} {print $0, og[$1] ? og[$1] : "NO_OG"}' 表格1 表格2
在这个命令中,BEGIN{FS=OFS="\t"} 表示设置输入和输出字段分隔符为制表符;FNR==1{print $0, "OG"; next} 表示对表格2的第一行添加列名 "OG";FNR==NR{og[$1]=$3; next} 表示对表格1进行处理,将第一列和第三列作为键值对存储在数组 og 中;{print $0, og[$1]} 表示对表格2的每一行,在末尾添加与其第一列对应的表格1中最后一列的值,即 og[$1] ,og[$1] ? og[$1] : "NO_OG" 表示如果数组 og 中存在对应的值,则输出该值,否则输出 "NO_OG"。
注意,这里假设表格1和表格2中的第一行都是标题行。如果不是,则需要根据实际情况修改 FNR==1 的判断条件。另外,由于 awk 默认使用缓冲区,可能会导致输出顺序与输入顺序不一致,因此建议在运行命令后手动检查输出结果
需求:按照需求对列排序,提取列等,
实现:awk 'BEGIN{FS=OFS="\t"} {print $4, $2, $3, $5}' 表格2 > 新表格文件名
需求:删除列中含有NO_OG的行
实现:awk '$2 != "No_OG"' 表格文件名 > 新文件名
网友评论