我有一个包含工作人员列表的csv文件,我想根据自己的ID编写脚本来修改其工作组。 CSV文件中的行如下所示:
之前:
ID TAG GROUP
niub16677500;B00;AB0
之后:
ID TAG GROUP
niub16677500;B00;BC0
我该怎么做?
我正在使用awk
和sed
命令,但此刻什么都没得到。
答案 0 :(得分:1)
使用awk
:
awk -F';' -v OFS=';' -v id="niub16677500" -v new_group="BC0" '{if($1==id)$3=new_group}1' input.csv
ID;TAG;GROUP
niub16677500;B00;BC0
将输出重定向到文件,并注意csv标头应使用与正文相同的字段分隔符。
说明:
-F';'
将输入字段分隔符设为;
-v OFS=';'
与输出FS相同-v id="niub16677500" -v new_group="BC0"
定义要在awk命令中使用的变量'{if($1==id)$3=new_group}1'
,当第一列等于变量id
中包含的值时,将覆盖第三个字段并打印行 使用sed
:
id="niub16677500"; new_group="BC0"; sed "/^$id/s/;[^;]*$/;$new_group/" input.csv
ID;TAG;GROUP
niub16677500;B00;BC0
您可以使用-i.bak
选项进行内联更改,或将输出重定向到文件。
说明:
/^$id/
,当您到达以变量ID中的ID存储开头的行时,请运行sed search并替换s/;[^;]*$/;$new_group/
搜索和替换命令,该命令将用新值替换最后一个字段答案 1 :(得分:0)
Sed可以做到
echo 'niub16677500;B00;AB0' | sed 's/\(^niub16677500;...;\)\(...\)$/\1BC0/'
通过匹配用户名,分号(任意3个字符和另一个分号),然后匹配其余3个字符,将示例中的AB0组替换为BC0。然后作为输出,它重复与\ 1的第一个匹配并添加BC0。
您可以使用:
sed 's/\(^niub16677500;...;\)\(...\)$/\1BC0/' <old_file >new_file
使用此更改创建一个新文件。
https://www.grymoire.com/Unix/Sed.html是很棒的资源,您应该看一下。