awk - 使用 awk 和 gsub 用字符串替换 CSV 的列

我有一个类似于以下内容的输入 csv 文件:

Name,Index,Location,ID,Message
Alexis,10,Punggol,4090b43,Production 4090b43
Scott,20,Bedok,bfb34d3,Prevent
Ronald,30,one-north,86defac,Difference 86defac
Cindy,40,Punggol,40d0ced,Central
Eric,50,one-north,aeff08d,Military aeff08d
David,60,Bedok,5d1152d,Study

我想使用 awkgsub 编写一个 bash shell 脚本,将 ID 列下的 6-7 个字母数字字符长字符串替换为“xxxxx”,其中单独的 .csv 文件中的输出。

现在我有:

#!/bin/bash
awk -F ',' -v OFS=',' '{gsub(/^([a-zA-Z0-9]){6,7}/g, "xxxxx", $4);}1' input.csv > output.csv

但是我从运行 bash myscript.sh input.csv 得到的输出没有任何意义。 output.csv 文件如下所示:

Name,Index,Location,ID,Message
Alexis,10,Punggol,4xxxxx9xxxxxb43,Production 4090b43
Scott,20,Bedok,bfb34d3,Prevent
Ronald,30,one-north,86defac,Difference 86defac
Cindy,40,Punggol,4xxxxxdxxxxxced,Central
Eric,50,one-north,aeffxxxxx8d,Military aeff08d
David,60,Bedok,5d1152d,Study

但是预期的输出 csv 应该是这样的:

Name,Index,Location,ID,Message
Alexis,10,Punggol,xxxxx,Production 4090b43
Scott,20,Bedok,xxxxx,Prevent
Ronald,30,one-north,xxxxx,Difference 86defac
Cindy,40,Punggol,xxxxx,Central
Eric,50,one-north,xxxxx,Military aeff08d
David,60,Bedok,xxxxx,Study

最佳答案

使用您显示的示例,请尝试以下代码:

awk -F ',[[:space:]]+'  -v OFS=',\t' '
{
  sub(/^([a-zA-Z0-9]){6,7}$/, "xxxxx", $4)
  $1=$1
}
1
' Input_file | column -t -s $'\t'

说明: 此处设置字段分隔符为逗号、空格,然后设置输出字段分隔符为逗号制表符。然后在第 4 个字段中用 xxxxx 替换从开始到结束的字母数字值(出现 6 到 7 次)。最后打印当前行。然后将 awk 程序的输出发送到 column 命令,使其按照 OP 示例显示。

编辑:如果您的 Input_file 现在根据编辑的示例仅由 , 分隔,请尝试执行以下操作。

awk -F ',' -v OFS=',' '
{
  sub(/^([a-zA-Z0-9]){6,7}$/, "xxxxx", $4)
}
1
' Input_file

注意:OP 从旧版本安装了最新版本的 awk,这些代码有帮助。

https://stackoverflow.com/questions/67999370/

相关文章:

kubernetes - 如何在 Kubernetes cronjob 中执行脚本 shell

ruby - 如何在 ruby​​ 中编写一个采用散列样式、方括号参数的方法,例如 mymethod

regex - 字符串和数字的 Perl 正则表达式 - 仅匹配最后 6 位数字

javascript - Next JS 和 Cloudinary,图像未加载

python - Django Channels - Websocket 连接失败

r - 如何对r中的几列求和?

flutter - 错误 : A non-null value must be returned s

flutter - 检查 flutter 中的连接并根据连接状态更改状态

javascript - console.log 在我的输入字段中给出 undefined

flutter - 如何将二进制字符串转换为文本字符串并在 flutter 中反转?