linux - 在多字符分隔符中时无法识别管道
问题描述
我有一个用|;|
. 例子;
1|;|2|;|3|;|4|;|5
1|;|2|;|3|;|4|;|5
我需要将分隔符更改为:
或其他内容,
但FS
inawk
对管道没有任何作用|
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 包含一个正则表达式,|
表示正则表达式中的替代。反斜杠以匹配它们的字面意思:
awk '$1=$1' FS='\\|;\\|' OFS=:
单个管道工作的原因是单字符 FS 被特殊处理:
如果 FS 是单个字符,则字段由该字符分隔。如果 FS 是空字符串,那么每个单独的字符将成为一个单独的字段。否则,FS 应该是一个完整的正则表达式。在 FS 是单个空格的特殊情况下,字段由空格和/或制表符和/或换行符分隔。
推荐阅读
- r - 使用具有两组坐标的 distGeo
- flutter - 如何使用颤振阅读应用程序购买状态?(in_app_purchase 包)
- keras - keras 中的 LSTM,输入形状,时间步长与 nfeatures
- animation - 单击时没有播放 Roblox 动画
- file-upload - 自定义上传按钮
- javascript - jQuery 没有正确渲染数据表
- json - 根据行数而不是数据大小 azure 数据工厂拆分 JSON 文件
- powershell - 使用 ACL 的 Powershell 快捷方式权限?
- postgresql - Grafana 和 PostgreSQL:当数据库以 UTC 保存时,从浏览器时间时区的时间戳中提取小时
- python - Python wrong behavior for the SUM OF 2D numpy.array