gpt4 book ai didi

shell - 如何使用 awk 或 sed 将每个单独出现的单词替换为其他单词?

转载 作者:行者123 更新时间:2023-12-04 01:02:41 26 4
gpt4 key购买 nike

我想用另一个词替换一行中 5 列中出现的每个词。

这是我的文件(每列由制表符分隔,当一列有多个彼此相同的条目时,它们由 , (逗号)分隔,如 "A_V, A_V,A_V,A_V" ).

g1      A_chrococcum_B3__ACG10_RS21915  A_chrococcum_NCIMB8003__Achr_RS24720    "A_salinestris__GCU53_RS00995,A_salinestris__GCU53_RS13820,A_salinestris__GCU53_RS25085,A_salinestris__GCU53_RS00050,A_salinestris__GCU53_RS24715"     "A_vinelandii_CA__AVCA_RS25530,A_vinelandii_CA__AVCA_RS00340,A_vinelandii_CA__AVCA_RS07835,A_vinelandii_CA__AVCA_RS09930,A_vinelandii_CA__AVCA_RS10910,A_vinelandii_CA__AVCA_RS11470,A_vinelandii_CA__AVCA_RS15230,A_vinelandii_CA__AVCA_RS21030,A_vinelandii_CA__AVCA_RS13765,A_vinelandii_CA__AVCA_RS06150,A_vinelandii_CA__AVCA_RS20865"   "A_vinelandii_DJ__AVIN_RS25600,A_vinelandii_DJ__AVIN_RS00380,A_vinelandii_DJ__AVIN_RS07870,A_vinelandii_DJ__AVIN_RS09960,A_vinelandii_DJ__AVIN_RS10940,A_vinelandii_DJ__AVIN_RS11500,A_vinelandii_DJ__AVIN_RS15260,A_vinelandii_DJ__AVIN_RS06190,A_vinelandii_DJ__AVIN_RS13795,A_vinelandii_DJ__AVIN_RS20895"

第一列的值是我想单独替换所有其他列的值的值。

我正在寻找这样的输出(第一个列(我想替换的字符串))。在第一个 col COL-1 只出现一次因此只有一个 g1,COL-2 也只出现一次因此只有一个 g1,COL-3 有 5 次出现,因此有 5 个 g1,COL-4 有 11 次出现因此有 11 g1 和等等。

g1      g1      g1      "g1,g1,g1,g1,g1"      "g1,g1,g1,g1,g1,g1,g1,g1,g1,g1,g1"      "g1,g1,g1,g1,g1,g1,g1,g1,g1,g1"

我尝试对第一行执行此操作,并认为我可以为文件的其余部分循环它。还因为我不知道如何一次对所有列执行此操作。

我正在尝试的命令:

 grep -w "g1" f1 |
awk -F"\t" '{ gsub("A_.*,","g1",$4); print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6}'

它给了我这样的结果:

g1      A_chrococcum_B3__ACG10_RS21915  A_chrococcum_NCIMB8003__Achr_RS24720    "g1A_salinestris__GCU53_RS24715"        "A_vinelandii_CA__AVCA_RS25530,A_vinelandii_CA__AVCA_RS00340,A_vinelandii_CA__AVCA_RS07835,A_vinelandii_CA__AVCA_RS09930,A_vinelandii_CA__AVCA_RS10910,A_vinelandii_CA__AVCA_RS11470,A_vinelandii_CA__AVCA_RS15230,A_vinelandii_CA__AVCA_RS21030,A_vinelandii_CA__AVCA_RS13765,A_vinelandii_CA__AVCA_RS06150,A_vinelandii_CA__AVCA_RS20865"  "A_vinelandii_DJ__AVIN_RS25600,A_vinelandii_DJ__AVIN_RS00380,A_vinelandii_DJ__AVIN_RS07870,A_vinelandii_DJ__AVIN_RS09960,A_vinelandii_DJ__AVIN_RS10940,A_vinelandii_DJ__AVIN_RS11500,A_vinelandii_DJ__AVIN_RS15260,A_vinelandii_DJ__AVIN_RS06190,A_vinelandii_DJ__AVIN_RS13795,A_vinelandii_DJ__AVIN_RS20895"

怎么做?我的文件中有 677779 行。

最佳答案

你可以使用这个awk:

awk 'BEGIN {FS=OFS="\t"} {for (i=2; i<=NF; ++i) gsub(/[^",]+/, $1, $i)} 1' file

g1 g1 g1 "g1,g1,g1,g1,g1" "g1,g1,g1,g1,g1,g1,g1,g1,g1,g1,g1" "g1,g1,g1,g1,g1,g1,g1,g1,g1,g1"

关于shell - 如何使用 awk 或 sed 将每个单独出现的单词替换为其他单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67699813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com