当前位置: 技术问答>linux和unix
急问:一个关于awk命令的问题
来源: 互联网 发布时间:2015-08-18
本文导语: 想用awk命令通过特征匹配查到某个字段,在该字段前面添加几个字母并重新把该字段写入原文件,能够做到吗?(用nawk命令也行) 比如:我的文件里面每行第2个字段有些开头没有带"2/",有些则带了"2/"的。我想在用awk...
想用awk命令通过特征匹配查到某个字段,在该字段前面添加几个字母并重新把该字段写入原文件,能够做到吗?(用nawk命令也行)
比如:我的文件里面每行第2个字段有些开头没有带"2/",有些则带了"2/"的。我想在用awk命令扫描这个文件后,若发现没带"2/",就在其前面添上“2/”,并重新写回到原文件保存。
这样写好像不行啊:
awk -F, '$2 !~ /2// { $2="2/"$2}' myfile
这个命令输入后不会报错,但打开myfile文件看,第四字段还是没有任何变化。
是不是要用sub这类函数才能修改原文件啊?该怎么用呢?当然如果能有其他比较简便的方法能达到上述目的也行。
多谢啦
比如:我的文件里面每行第2个字段有些开头没有带"2/",有些则带了"2/"的。我想在用awk命令扫描这个文件后,若发现没带"2/",就在其前面添上“2/”,并重新写回到原文件保存。
这样写好像不行啊:
awk -F, '$2 !~ /2// { $2="2/"$2}' myfile
这个命令输入后不会报错,但打开myfile文件看,第四字段还是没有任何变化。
是不是要用sub这类函数才能修改原文件啊?该怎么用呢?当然如果能有其他比较简便的方法能达到上述目的也行。
多谢啦
|
呵呵,用这样试试:
awk -F, '$2 !~ /2// { $2="2/"$2}{print $0}' myfile > tempfile; mv tempfile myfile
awk -F, '$2 !~ /2// { $2="2/"$2}{print $0}' myfile > tempfile; mv tempfile myfile
|
$2 !~ /2// { #当第二字段包含2/时
$2="2/"$2; #处理第二字段
print $0; #把处理后的数据整行输出
next; #跳过后面的代码,处理下一条记录
}
{print $0;} #对所有的记录输出整行,因为上面的next,实际上是不包含2/时输出整行
$2="2/"$2; #处理第二字段
print $0; #把处理后的数据整行输出
next; #跳过后面的代码,处理下一条记录
}
{print $0;} #对所有的记录输出整行,因为上面的next,实际上是不包含2/时输出整行
|
awk -F, '$2 !~ /2// {$2="2/"$2;print $0;}' myfile