Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
Replace 如何替换文件中的多个列?_Replace_Awk_Sed_Multiple Columns_Solaris - Fatal编程技术网

Replace 如何替换文件中的多个列?

Replace 如何替换文件中的多个列?,replace,awk,sed,multiple-columns,solaris,Replace,Awk,Sed,Multiple Columns,Solaris,假设我有一个文件,我想用AAAA替换第1、第3和第5列,该文件由|(管道)分隔 到目前为止,我使用for循环来实现这一点,但我认为这会消耗大量空间,因为我在每个列替换后将结果复制到一个临时文件(输入文件名很大) 请建议一种更聪明的方法为什么不直接使用awk?这是直截了当的: awk -v repl="AAAA" 'BEGIN{FS=OFS="|"} {$1=$3=$5=repl}1' file > new_file 试验 为什么不直接使用awk?这是直截了当的: awk -v repl=

假设我有一个文件,我想用AAAA替换第1、第3和第5列,该文件由
|
(管道)分隔

到目前为止,我使用for循环来实现这一点,但我认为这会消耗大量空间,因为我在每个列替换后将结果复制到一个临时文件(输入文件名很大)


请建议一种更聪明的方法

为什么不直接使用
awk
?这是直截了当的:

awk -v repl="AAAA" 'BEGIN{FS=OFS="|"} {$1=$3=$5=repl}1' file > new_file
试验
为什么不直接使用
awk
?这是直截了当的:

awk -v repl="AAAA" 'BEGIN{FS=OFS="|"} {$1=$3=$5=repl}1' file > new_file
试验 通用到多个列(在列中设置)和模式替换(在Pat中插入)

awk-v'Col=1,3,5'-v'Pat=AAAA''开始{OFS=FS=“|”}{for(i=1;i通用到多个列(在Col中设置)和模式替换(在Pat中插入)



awk-v'Col=1,3,5'-v'Pat=AAAA''BEGIN{OFS=FS=“|”}{for(i=1;iHi-fedorqui,1在'BEGIN{FS=OFS=“|”}{$1=$3=$5=repl}1'的末尾代表什么?@user3369871
1
代表真。如果是真的话,
awk
执行默认操作:打印当前行。遇到错误awk-v repl=“aafs='repl=$3=$repl}{$3}1'a awk:第1行附近的语法错误awk:第1行附近的释放1@user3369871您是否在Solaris下?如果是,请使用以下awk-->
/usr/xpg4/bin/awk
。还有一个问题,如果我必须将某些内容视为错误,那么我是否应该在最后输入0,您能举个例子更好地理解您的评论吗?嗨,fedorqui,1代表什么'BEGIN{FS=OFS=“|”}{$1=$3=$5=repl}1'?@user3369871
1
结尾的s代表True。如果为True,
awk
执行其默认操作:打印当前行。遇到错误awk-v repl=“AAAA”'BEGIN{FS=OFS=“|”}{$1=$3=$5=repl}1'a awk:第1行附近的语法错误awk:第1行附近的释放1@user3369871您是否在Solaris下?如果是,请使用以下awk-->
/usr/xpg4/bin/awk
。还有一个问题,如果我必须将某些内容视为错误,那么我是否应该在最后输入0,您能举个例子更好地理解您的评论吗?@NeronLeVelu,对不起,我没有不了解(“,”Col“,“~”,”i“,”)是否完整不测试字段索引
i
是否在要替换的列列表中。原始列表用
周围的分隔符完成,以允许在“Col=1,3,5”和if(“,”Col“,“~”,”i“,”)的情况下搜索工作中的i+分隔符的模式分隔符+值但是当'Col=1 3 5'和if(“'Col”“~”“i”“)awk-v Col=1 3 5-v'Pat=AAAA”“开始时,{OFS=FS=“|”}{for(i=1;我必须在这里尝试使用空格作为分隔符,并且工作正常(如果分隔符在所有部分上都是相同的,并且没有像
*
这样的特殊含义,则没有理由失败)@NeronLeVelu,对不起,我不明白(“,”Col“,”,“~”,”i“,”)CompleteYIT测试字段索引
i
是否在要替换的列列表中。当'Col=1,3,5'和if(“,”Col“,”i“,”i“,”)时,原始列表用
周围的分隔符来完成,以允许搜索i+分隔符内部的模式分隔符+值,但当'Col=1,3,5'和if(“,”Col“~”)时,不允许搜索“”)awk-v Col=1 3 5-v'Pat=AAAA“”开始{OFS=FS=“|”}{for(i=1;我必须在此处尝试使用空格作为分隔符,并且工作正常(如果分隔符在所有部分上都相同,并且没有特殊含义,如
*
,则没有理由失败)
$ cat a
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
$ awk -v repl="AAAA" 'BEGIN{FS=OFS="|"} {$1=$3=$5=repl}1' a
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8
awk -v 'Col=1,3,5' -v 'Pat=AAAA' 'BEGIN{OFS=FS="|"} {for(i=1;i<=NF;i++) if( ","Col"," ~ ","i",")$i=Pat;print}' YourFile > NewFile