加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何在不丢失awk格式的情况下替换整个列

发布时间:2020-12-13 23:28:41 所属栏目:Linux 来源:网络整理
导读:编者注: 这个问题有一个困难的编辑历史,因为一个善意但误导的编辑(引入了无关的,“漂亮”的格式依赖于空格和|字符来分隔列)暂时混淆了这个问题(自从还原后). OP的前提是输入是制表符分隔的,即使它没有直接反映在此处显示的示例输入中. 我有一个包含6列的输
编者注:
这个问题有一个困难的编辑历史,因为一个善意但误导的编辑(引入了无关的,“漂亮”的格式依赖于空格和|字符来分隔列)暂时混淆了这个问题(自从还原后).
OP的前提是输入是制表符分隔的,即使它没有直接反映在此处显示的示例输入中.

我有一个包含6列的输入文件,它们是以制表符分隔的.我想用值’81115’替换第5列中的所有值,同时保持格式不变.

输入文件 :

203           ADD              24       IAC              81216            IT     
204           ATT              24       IAC              81216            IT

期望的输出文件:

203           ADD              24       IAC              81115            IT  
204           ATT              24       IAC              81115            IT

我的解决方案#1

我使用以下命令:

awk '{$5 = v} 1' v="81115" file > file.NEW

使用上面的命令,第5列将被替换,但列不再以制表符分隔.

输出文件 :

203 ADD 24 IAC 81115 IT 

204 ATT 24 IAC 81115 IT

我的解决方案#2

为了保持格式化,我尝试使用以下命令:

awk -v replace="81115" -F 't' -v OFS='t' {$5=replace}1' file > file.NEW

要么

awk -F"t" -v OFS="t" '{$5=81115}1' file > file.NEW

要么

awk -F 't' '{$5="81115";}1' OFS='t' file > file.NEW

所有上述命令都保持格式不变,但最后添加了一个值为81115的新列;即,第7列被追加.

输出文件:

203           ADD              24       IAC              81216            IT            81115

204           ATT              24       IAC              81216            IT            81115

任何人都可以建议替代解决方案或更改上述命令吗?

解决方法

对于保留格式的列内更新,您需要使用拆分功能.请注意,只有GNU awk支持带有第四个参数的split函数.

试试这个:

awk '{split($0,a,FS,seps)          # split based on FS
      a[5]="81115";                    # Update the 5th column
      for (i=1;i<=NF;i++)              # print the data back
         printf("%s%s",a[i],seps[i]) # keeping the separators
      print ""}'                       # print a new line

一内胆:

awk '{split($0,seps); a[5]="81115"; for (i=1;i<=NF;i++) printf("%s%s",seps[i]); print ""}' /tmp/data

信用额度为https://stackoverflow.com/a/39326264/2032943

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读