将awk操作应用于特定列

将awk操作应用于特定列,awk,Awk,我有一个文件,其中的行如下所示: chr1 66999275 67216822+SGIP1;SGIP1;SGIP1;SGIP1;MIR3117 我现在想编辑最后一列以删除重复项,这样它就只会是SGIP1;MIR3117 如果我只有最后一列,我可以使用下面的awk代码删除重复项 a="SGIP1;SGIP1;SGIP1;SGIP1;MIR3117" echo "$a" | awk -F";" '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",

我有一个文件,其中的行如下所示:

chr1 66999275 67216822+SGIP1;SGIP1;SGIP1;SGIP1;MIR3117

我现在想编辑最后一列以删除重复项,这样它就只会是SGIP1;MIR3117

如果我只有最后一列,我可以使用下面的awk代码删除重复项

a="SGIP1;SGIP1;SGIP1;SGIP1;MIR3117"
echo "$a" | awk -F";" '{for (i=1;i<=NF;i++) if (!a[$i]++) printf("%s%s",$i,FS)}{printf("\n")}'
a=“SGIP1;SGIP1;SGIP1;SGIP1;MIR3117”

echo“$a”| awk-F”“{for(i=1;i请尝试以下内容

awk '
{
  num=split($NF,array,";")
  for(i=1;i<=num;i++){
    if(!found[array[i]]++){
      val=(val?val ";":"")array[i]
    }
  }
  $NF=val
  val=""
}
1
'  Input_file
awk'
{
num=split($NF,数组,“;”)
对于(i=1;i<p>i),我不认为它是“优雅”的,它在一定数量的假设下工作。

awk -F"+" '{printf("%s+ ",$1);split($2,a,";"); for(s in a){gsub(" ", "", a[s]); if(!c[a[s]]++) printf("%s;", a[s])}}' test.txt
根据您的输入进行测试,返回:

chr1 66999275 67216822 + SGIP1;MIR3117;
chr1 66999275 67216822 + SGIP1;MIR3117;