使用awk替换特殊字符

使用awk替换特殊字符,awk,Awk,我有一个文件,第一个字段如下: ENSGALG00000000189|ENSGALT00000000247|10|3979|4020 我想去掉“|”符号,只留一个空间 我一直在尝试此代码,但不起作用: awk -F "|" '{gsub ("|", "")' file 如果你能帮我做这件事,我将非常感激。谢谢你,这个awk应该可以 echo "ENSGALG00000000189|ENSGALT00000000247|10|3979|4020 " | awk -F\| '$1=$1' O

我有一个文件,第一个字段如下:

ENSGALG00000000189|ENSGALT00000000247|10|3979|4020  
我想去掉“|”符号,只留一个空间

我一直在尝试此代码,但不起作用:

awk -F "|" '{gsub ("|", "")' file

如果你能帮我做这件事,我将非常感激。谢谢你,这个
awk
应该可以

echo "ENSGALG00000000189|ENSGALT00000000247|10|3979|4020 " | awk -F\| '$1=$1' OFS=" "
ENSGALG00000000189 ENSGALT00000000247 10 3979 4020
或者更强壮一些

awk -F\| '{$1=$1}1' OFS=" "

这些设置将输入字段分隔符设置为
|
,将输出分隔符设置为
“space”
$1=$1
使用新分隔符重构数据。

使用
gsub

$> echo "ENSGALG00000000189|ENSGALT00000000247|10|3979|4020" | awk '{ gsub (/\|/, " "); print }' 
ENSGALG00000000189 ENSGALT00000000247 10 3979 4020

处理管道符号-

$ cat file
ENSGALG00000000189|ENSGALT00000000247|10|3979|4020
使用awk

使用sed


使用
tr
代替
awk

tr '|' ' ' < input.txt > output.txt
tr'|'output.txt

awk解决方案不好,因为它只对一组固定的元素有效。您差一点就到了,错过了最后一个
}
和打印出来的
1
$ cat file | sed 's/|/ /g'
ENSGALG00000000189 ENSGALT00000000247 10 3979 4020
tr '|' ' ' < input.txt > output.txt