Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在unix系统中,将文件中的字符串替换为可变位置_String_Unix_Csv_Replace - Fatal编程技术网

String 在unix系统中,将文件中的字符串替换为可变位置

String 在unix系统中,将文件中的字符串替换为可变位置,string,unix,csv,replace,String,Unix,Csv,Replace,我在unix服务器上工作。 我有许多csv文件,其中包含日期字段等信息 我必须用另一个值替换一些日期字段,例如20110915到20110815。它们的位置因文件而异 问题是替换是位置字段特定的。例如,如果我的文件有如下行: 布拉布拉布拉;12;0.2121;20110915;20110915;19951231;波波波;其他案文;321;20101010 我必须只替换第一个日期字段,而不替换其他字段,将行转换为: 布拉布拉布拉;12;0.2121;20110815;20110915;199512

我在unix服务器上工作。
我有许多csv文件,其中包含日期字段等信息

我必须用另一个值替换一些日期字段,例如2011091520110815。它们的位置因文件而异

问题是替换是位置字段特定的。例如,如果我的文件有如下行:

布拉布拉布拉;12;0.2121;20110915;20110915;19951231;波波波;其他案文;321;20101010

我必须只替换第一个日期字段,而不替换其他字段,将行转换为:

布拉布拉布拉;12;0.2121;20110815;20110915;19951231;波波波;其他案文;321;20101010

是否有方法使用一些约束来限制文件中的替换


谢谢

您可以试试
awk

awk  'BEGIN {FS=";";OFS=";"} {if($4=="20110915")$4="20110815"; print}' input.csv
工作原理:


FS
OFS
定义输入和输出字段分隔符。它将第四个字段($4)与
20110915
进行比较。如果匹配,则更改为
20110815
。然后打印该行。

以下是在awk中使用gsub的替代方案:

awk 'BEGIN {FS=";";OFS=";"} {gsub(/20110915/,20110815,$4); print}' input.csv
如果您必须在一系列字段/列(例如4-4)中替换,请使用以下方法:

awk'BEGIN{FS=“;”OFS=“;”}{for(i=4;i
awk 'BEGIN {FS=";";OFS=";"} {for(i=4;i<=4;i++){gsub(/20110915/,20110815,$i)}; print}' input.csv