用户bash给出的进程特定字段

时间:2016-10-11 17:45:25

标签: bash shell input awk field

因此用户给了我三个输入ID COLUMN VALUE。我想用行替换行列中的字段。我试过像这样使用awk

awk -F '|' -v COLUMN="$COLUMN" -v VALUE="$VALUE" '{if (FNR>1 && ID==$1) {$COLUMN=VALUE}}' $FILE

但我认为我的语法出错了,最终我打印出的整个文件没有任何变化。

实施例

#id|lastName|firstName|gender|birthday|creationDate|locationIP|browserUsed
7696581400586|Silva|Manuel|male|1987-08-31|2011-06-07T15:47:05.863+0000|193.126.75.5|Firefox
7696581400608|Li|Jun|female|1983-08-11|2011-05-11T05:20:42.017+0000|27.129.140.209|Chrome
7696581402447|Calvert|Charles|male|1985-09-18|2011-05-27T06:57:05.070+0000|41.51.52.232|Internet Explorer

说用户给我输入7696581400608 2 Yung。所以我在id 7696581400608所在的行中用名称Yung替换字段2。所以我用Yung取代李。

1 个答案:

答案 0 :(得分:1)

你可以使用这个awk:

awk -v id='7696581400608' -v col=2 -v val='Yung' 'BEGIN { FS=OFS="|" }
$1 == id { $col = val } 1' file.csv

#id|lastName|firstName|gender|birthday|creationDate|locationIP|browserUsed
7696581400586|Silva|Manuel|male|1987-08-31|2011-06-07T15:47:05.863+0000|193.126.75.5|Firefox
7696581400608|Yung|Jun|female|1983-08-11|2011-05-11T05:20:42.017+0000|27.129.140.209|Chrome
7696581402447|Calvert|Charles|male|1985-09-18|2011-05-27T06:57:05.070+0000|41.51.52.232|Internet Explorer