已知表格1中內(nèi)容為:
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中內(nèi)容為:
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
已知第一個表格中第一列和最后一列內(nèi)容中每一行都互相對應(yīng)惑灵,需求是魁蒜,使用awk在表格2中插入1列,要求插入列的內(nèi)容和第一個表格的最后一列互相對應(yīng)愚隧,列名稱為OG电媳。表格2中原有列都保留踏揣。表格列之間都以\t分割。
實(shí)現(xiàn):
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"} 表示設(shè)置輸入和輸出字段分隔符為制表符捞稿;FNR==1{print $0, "OG"; next} 表示對表格2的第一行添加列名 "OG";FNR==NR{og[$1]=$3; next} 表示對表格1進(jìn)行處理拼缝,將第一列和第三列作為鍵值對存儲在數(shù)組 og 中娱局;{print $0, og[$1]} 表示對表格2的每一行,在末尾添加與其第一列對應(yīng)的表格1中最后一列的值咧七,即 og[$1] 衰齐,og[$1] ? og[$1] : "NO_OG"?表示如果數(shù)組?og?中存在對應(yīng)的值,則輸出該值继阻,否則輸出 "NO_OG"耻涛。
注意,這里假設(shè)表格1和表格2中的第一行都是標(biāo)題行瘟檩。如果不是抹缕,則需要根據(jù)實(shí)際情況修改 FNR==1 的判斷條件。另外墨辛,由于 awk 默認(rèn)使用緩沖區(qū)卓研,可能會導(dǎo)致輸出順序與輸入順序不一致,因此建議在運(yùn)行命令后手動檢查輸出結(jié)果
需求:按照需求對列排序,提取列等奏赘,
實(shí)現(xiàn):awk 'BEGIN{FS=OFS="\t"} {print $4, $2, $3, $5}' 表格2 > 新表格文件名
需求:刪除列中含有NO_OG的行
實(shí)現(xiàn):awk '$2 != "No_OG"' 表格文件名 > 新文件名