问题描述
1|;|2|;|3|;|4|;|5
1|;|2|;|3|;|4|;|5
我需要将定界符更改为:
或其他内容,
但是FS
中的awk
对管道|
不起任何作用
awk '$1=$1' FS="|;|" OFS=":" file
1|:|2|:|3|:|4|:|5
1|:|2|:|3|:|4|:|5
管道|
用作单个字符分隔符时会被识别;
awk '$1=$1' FS="|" OFS="" file
1:2:3:4:5
1:2:3:4:5
但是,sed
解决了该问题,
sed 's/|;|/:/g' file
但是我想知道是否可以使用awk
命令。
解决方法
FS包含一个正则表达式,|
在正则表达式中表示 alternative 。在管道上反斜杠以按实际方式匹配它们:
awk '$1=$1' FS='\\|;\\|' OFS=:
单个管道正常工作的原因是一个字符的FS:
如果FS是单个字符,则字段由该字符分隔。如果FS为空字符串,则每个单独的字符将成为一个单独的字段。否则,FS应该是完整的正则表达式。在特殊情况下,FS是单个空格,字段之间用空格和/或制表符和/或换行符隔开。