首页 > 解决方案 > 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 没有任何循环:

awk '{gsub("^(300[^ ]* )+|( 300[^ ]*)+","")}1' file

不需要的数字(以 开头300)可以位于行首或中间。可以删除 at 数的几个连续序列(使用+正则表达式运算符)

这显然可以很容易地翻译成sed

sed -E 's/^(300[^ ]* )+|( 300[^ ]*)+//' file

推荐阅读