linux - 在第一次匹配时删除第 N 列中特定数字之前的所有字符而不是最后一个
问题描述
我正在尝试从数据集中的第 5 列中删除一个随机字符块。
样本数据:
A | 12 | AA | 24 | Test to go and keep 192.168.1.1 > 192.168.2.1 | B
结果应如下所示:
A | 12 | AA | 24 | 192.168.1.1 > 192.168.2.1 | B
到目前为止我有这个:
awk 'BEGIN{FS=OFS="|"} {gsub(".*? 192","", $5 )} 1' file.txt
但是,这会删除最后一场比赛前第 5 列中的所有内容。
代码现在做了什么:
.168.2.11
我需要在第一场比赛不是最后一场之前删除所有内容
解决方案
使用您显示的示例,请尝试以下awk
代码。|
简单的解释是:为 Input_file 的所有行设置字段分隔符和输出字段分隔符。然后在第 5 个字段中用 NULL 全局替换空格和字母。根据显示的示例在第 5 个字段之前和之后添加空格,最后打印已编辑/未编辑的当前行。
awk 'BEGIN{FS=OFS="|"} {gsub(/[[:alpha:]]+|[[:space:]]+/,"",$5);$5=" "$5" "} 1' Input_file
编辑:如果您想在第 5 个字段中始终匹配 IP 地址 > IP 地址形式,那么只需尝试以下操作。
awk 'BEGIN{FS=OFS="|"} match($0,/([0-9]+\.){3}[0-9]+ > ([0-9]+\.){3}[0-9]+/){$5=substr($0,RSTART,RLENGTH)} 1' Input_file
推荐阅读
- swift - 将数据传回 UIPickerView
- java - 如何在 JEditorPane 中为 html 设置超时
- go - 如何在不转义的情况下从 url 获取参数(golang)
- mysql - 收到错误 #1452 - 无法添加或更新子行”
- c# - 在配置文件中的“命名空间”中命名,可以吗?
- swift - Facebook 登录会冻结应用程序,并且不会在 iOS 13 上打开 Facebook 权限视图
- angular - 角度 ng 更新不起作用 - 保存代理的位置超时?
- python-3.x - 为什么 int 数据类型的大小比 python 中的 float 大?
- r - 选择以()结尾并包含主列 R 的列
- javascript - 将字符串添加到 textarea 元素中的新行