如果另一个字段匹配字符串,则增加字段值



我试图在csv文件中增加一个值,提供它与搜索字符串匹配。下面是使用的脚本:

awk -i inplace -F',' '$1 == "FL" { print $1, $2+1} ' data.txt

data.txt目录:

NY,1
FL,5
CA,1

当前输出:

FL 6

目的输出:

NY,1
FL,6
CA,1

谢谢。

$ awk 'BEGIN{FS=OFS=","} $1=="FL"{++$2} 1' data.txt
NY,1
FL,6
CA,1

目的输出:

NY,1 FL,6 CA,1

我将按照以下方式利用GNUAWK来完成这项任务,让file.txt内容为

NY,1
FL,5
CA,1

然后

awk 'BEGIN{FS=OFS=",";ORS=" "}{print $1,$2+($1=="FL")}' file.txt

给输出

NY,1 FL,6 CA,1 

说明:我根据您的要求通知GNUAWK,字段分隔符(FS)和输出字段分隔符(OFS)为,,输出行分隔符(ORS)为空格。然后对于每一行Iprint第一个字段后面跟着第二个字段增加是第一个字段FL?, 1表示有效,0表示无效。如果您想了解更多关于FSOFSORS的信息,请阅读8个强大的Awk内置变量- FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

(在gawk 4.2.1中测试)

使用下面的Perl一行代码:

perl -i -F',' -lane 'if ( $F[0] eq "FL" ) { $F[1]++; } print join ",", @F;' data.txt

Perl单行程序使用这些命令行标志:
-e:告诉Perl查找内联代码,而不是在文件中查找。
-n:每次循环输入一行,默认赋值给$_
-l:在执行内联代码之前剥离输入行分隔符(*NIX默认为"n"),并在打印时附加它。
-a:根据空格或-F选项中指定的regex将$_拆分为数组@F
-F',':用逗号分隔成@F,而不是用空格分隔。
-i.bak:就地编辑输入文件(覆盖输入文件)。覆盖之前,保存原始文件的一个备份副本通过添加扩展.bak其名称。如果您想跳过写入备份文件,只需使用-i并跳过扩展名。

参见:
perldoc perlrun:如何执行Perl解释器:命令行切换