我试图在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表示无效。如果您想了解更多关于FS
或OFS
或ORS
的信息,请阅读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解释器:命令行切换