awk - awk 从多列行中排除特定列
问题描述
如何使用 awk 排除以 300 开头的列,但不排除具有 300 的列?例如
输入:
100230070 100214996 100214992 300230217 100227462 100231344
100223007
100230055
300000213 300000180 100230295
100230295 100222531 100230174 100230051
输出:
100230070 100214996 100214992 100227462 100231344
100223007
100230055
100230295
100230295 100222531 100230174 100230051
解决方案
使用 awk 没有任何循环:
awk '{gsub("^(300[^ ]* )+|( 300[^ ]*)+","")}1' file
不需要的数字(以 开头300
)可以位于行首或中间。可以删除 at 数的几个连续序列(使用+
正则表达式运算符)
这显然可以很容易地翻译成sed
:
sed -E 's/^(300[^ ]* )+|( 300[^ ]*)+//' file
推荐阅读
- python - 如何在python中迭代和匹配IP与IP范围(cidr)?
- flutter - 如何在颤动中调用加载方法?
- python - Ambari Agent Distro/Conf 选择版本
- azure-cosmosdb - SQL Azure 表是否类似于 Azure Cosmos DB 容器?
- java - java.io.FileNotFoundException:
/document.xml(参数不正确) - mysql - 向现有表添加新列并将其显示到视图刀片(LARAVEL,mysql)中
- c++ - std::hardware_破坏性_干扰_大小在哪里?
- microstrategy - 当您创建一个自由形式的微观策略时,是否可以进行自动映射?
- powershell - 运行命令后 Windows PowerShell 保持光标
- c# - 使用 C# WinForms 更改电子邮件中图像的位置