2016-03-02 72 views
1

CSV文件上的数据处理有很多问题。但都是具体的。shell脚本 - 如果列b包含字符串字符串,CSV文件更改第n列的值

我用逗号分隔的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 

我想从NULL更改列“目标”的值设定为“ACTIVE”,如果该列“NAME”要么为“RX”或“DMT”。

以下是预期的输出。

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

分离输入逗号(不在样本数据中显示)? – anubhava

+0

thaks anubhava,我编辑了请求以正确的格式显示它。 – databIte

回答

0

假设您的输入逗号分隔的问题说,你可以使用这个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 
+0

@databIte:这是否适合你? – anubhava

+1

谢谢anubhav。像魅力一样工作。 – databIte

+0

嗨Anubhav,与上面的要求相同,我们可以添加这样的东西。 如果这里的'名称'的选择列值匹配,那么将数据更改为多于一列的数据。 例如 如果'Name'是'RX | DMT',那么'Target'被设置为'Active'并且'Desc'被改为'Edited' – databIte

相关问题