使用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