Shell脚本 - 如果列b包含serach字符串,则CSV文件更改第n列的值

时间:2016-03-02 07:29:23

标签: 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
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

1 个答案:

答案 0 :(得分:1)

假设您输入的内容是逗号分隔的问题,您可以使用此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

要获取格式化输出,请使用column

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