bash - awk:特定符号后的替换字符
问题描述
考虑一个指定日期的文件列,如下所示2006-02-04
。所需的输出2006-2-4
适用于包含前导零的日期和月份的所有行。使用带有 gsub() 的 awk 命令如何实现这一点?
如果该问题已在网站上的另一个问题中得到回答,将删除该问题。
解决方案
您可以使用gensub
将字符串与反向引用匹配,然后用删除的零替换。以下是纯 BEGIN 块中的(愚蠢)示例:
awk 'BEGIN { x = "2006-02-04";
x = gensub(/([0-9]{4})-0([0-9])-0([0-9])/, "\\1-\\2-\\3", 1, x);
print x
}' </dev/null
将输出:
2006-2-4
如果您知道输入格式是“精确的”,那么substr
如果正确的字符等于0
...,您就可以这样做:
awk 'BEGIN { x = "2006-02-04";
if (substr(x, 9, 1) == "0") { x = substr(x, 0, 8) substr(x, 10); }
if (substr(x, 6, 1) == "0") { x = substr(x, 0, 5) substr(x, 7); };
print x;
}' </dev/null
推荐阅读
- unity3d - 使用 AddressableAssets.LoadAssetsAsync
- r - 通过 MatchIt(或其他软件包)减少“处理”样本量以增加样本相似性
- prometheus - 集群监听地址与 AlertManager 中的广告地址
- python - Opencv python在一段时间后崩溃
- python-3.x - 如何从 Secrets Manager 中获取秘密并通过 lambda 将其传递给我的 SSM 运行命令文档?
- swift - 集合视图中的自动布局 ImageView 高度锚冲突且无法正常工作
- asp.net - IIS 8.5 最大文件上传大小
- docker - 将 tar 从主机提取到 docker 容器
- javascript - 如何在nodejs中重置json文件
- azure-cognitive-search - 如果重置索引器或更改查询参数,AzureSearch 查询键是否会更改?