Bash Shell脚本-CSV文件更改值n';如果列b包含serach字符串,则为第列
在CSV文件的数据处理方面有很多问题。但所有这些都是具体的 我有逗号分隔的CSV文件。我已经做了必要的操作,但还有一步我还停留在 请注意,我希望使用Shell脚本进行此更改。”“AWK”或“SED”可能对我有所帮助,但我缺乏正确语法的知识 输入:Bash Shell脚本-CSV文件更改值n';如果列b包含serach字符串,则为第列,bash,shell,csv,awk,sed,Bash,Shell,Csv,Awk,Sed,在CSV文件的数据处理方面有很多问题。但所有这些都是具体的 我有逗号分隔的CSV文件。我已经做了必要的操作,但还有一步我还停留在 请注意,我希望使用Shell脚本进行此更改。”“AWK”或“SED”可能对我有所帮助,但我缺乏正确语法的知识 输入: Index,SrNo,Name,Desc,Target,Strength 1,125,RX,Big,NULL,236 2,246,DMT,Med,NULL,548 3,425,VT,SML,NULL,461 4,512,RX,Big,NULL,415
Index,SrNo,Name,Desc,Target,Strength
1,125,RX,Big,NULL,236
2,246,DMT,Med,NULL,548
3,425,VT,SML,NULL,461
4,512,RX,Big,NULL,415
5,951,VT,SML,NULL,243
6,426,DMT,Med,NULL,412
如果列“NAME”是“RX”或“DMT”,我想将列“Target”的值从NULL更改为“ACTIVE”
以下是预期产出
Index,SrNo,Name,Desc,Target,Strength
1,125,RX,Big,Active,236
2,246,DMT,Med,Active,548
3,425,VT,SML,NULL,461
4,512,RX,Big,Active,415
5,951,VT,SML,NULL,243
6,426,DMT,Med,Active,412
假设您的输入如问题所述以逗号分隔,您可以使用以下awk:
awk 'BEGIN{FS=OFS=","} $3 ~ /^(RX|DMT)$/{$5 = "ACTIVE"} 1' file.csv
Index,SrNo,Name,Desc,Target,Strength
1,125,RX,Big,Active,236
2,246,DMT,Med,Active,548
3,425,VT,SML,NULL,461
4,512,RX,Big,Active,415
5,951,VT,SML,NULL,243
6,426,DMT,Med,Active,412
要获得格式化输出,请使用列
:
awk 'BEGIN{FS=OFS=","} $3 ~ /^(RX|DMT)$/{$5 = "ACTIVE"} 1' file.csv |
column -s, -t
Index SrNo Name Desc Target Strength
1 125 RX Big Active 236
2 246 DMT Med Active 548
3 425 VT SML NULL 461
4 512 RX Big Active 415
5 951 VT SML NULL 243
6 426 DMT Med Active 412
输入是否用逗号分隔(未在示例数据中显示)?thaks anubhava,我编辑了请求以正确的格式显示。谢谢anubhav。工作起来很有魅力。嗨,阿努巴夫,与上述要求相同,我们可以添加类似的内容。如果此处为“Name”的选择列值匹配,则更改多个列的数据。例如,如果'Name'是'RX | DMT',那么'Target'将设置为'Active','Desc'将更改为'Edited'是:
awk'BEGIN{FS=OFS=“,”}$3~/^(RX | DMT)$/{$4=“Edited”$5=“Active”}1”file.csv