使用awk或gsub替换列中的特定图案

使用awk或gsub替换列中的特定图案,awk,gsub,Awk,Gsub,我有一个以制表符分隔的文件,其列如下所示: 1 2 3 Score\x3e366\x3bName\x3elod\x3e41 3 5 6 Score\x3e366\x3bName\x3elod\x3e41 我需要用“=”替换“\x3e”,用“;”替换“\x3b”在第四栏。输出应该如下所示: 1 2 3 Score=366;Name=lod=41 3 5 6 Score=366;Name=lod=41 请有人帮助awk/gsub完成

我有一个以制表符分隔的文件,其列如下所示:

 1   2   3    Score\x3e366\x3bName\x3elod\x3e41
 3   5   6    Score\x3e366\x3bName\x3elod\x3e41
我需要用“=”替换“\x3e”,用“;”替换“\x3b”在第四栏。输出应该如下所示:

 1   2   3    Score=366;Name=lod=41
 3   5   6    Score=366;Name=lod=41

请有人帮助awk/gsub完成这项工作。提前谢谢。

sed怎么样

more file.txt | sed -e s/\\\\x3e/=/g | sed -e s/\\\\x3b/\;/g
诚然,这很轻松地假设这些字符序列不会出现在第3列之外的任何地方,但是如果这是允许的话,上面的内容应该适用于您

$ awk '{col=$4; gsub(/\\x3e/,"=",col); gsub(/\\x3b/,";",col); sub(/[^[:space:]]+$/,col)} 1' file
 1   2   3    Score=366;Name=lod=41
 3   5   6    Score=366;Name=lod=41
需要替换的列不是行中最后一列的一般情况:

$ cat file
 1   2   3    Score\x3e366\x3bName\x3elod\x3e41    foo
 3   5   6    Score\x3e366\x3bName\x3elod\x3e41    bar
这是(为gensub()使用GNU awk,并为可读性将其分成几行):


谢谢。它工作得很好,但我一直在想,如果这种模式存在于其他地方,是否可以限制为特定列?为什么要
more
ing该文件?@Jidder您能建议一种更好的方法吗?嗨,在python脚本中使用此命令时,这似乎不起作用。输出保持不变。有什么不对劲的线索吗?
$ awk -v n=4 '{
    col = $n
    gsub(/\\x3e/,"=",col)
    gsub(/\\x3b/,";",col)
    print gensub("(\\s*)((\\S+\\s+){"n-1"})\\S+(.*)","\\1\\2" col "\\4","")
}' file
 1   2   3    Score=366;Name=lod=41    foo
 3   5   6    Score=366;Name=lod=41    bar