【问题标题】:Search and replace using awk使用 awk 搜索和替换
【发布时间】:2013-09-25 18:55:06
【问题描述】:

我有一个包含数百行的文件,每行都有一组带有分隔符 ~ 的字符,如下所示。

T01~T02~T03~T04~T05~T06~T07~T08~T09~T10~T11~~T13
.
.
.
.

我需要使用 awk 删除 T02、T11 和 T12。如果您看到上面的字符串,则 T12 为空,但我仍需要清空该位置,我的输出应如下所示:

T01~T03~T04~T05~T06~T07~T08~T09~T13

我试过下面的awk命令

awk -F~ '{$2=$11=$12="";print $0}'

但它给出的输出类似于

T01 T02 T03 T04 T05 T06 T07 T08 T09 T10 T11  T13

如果我遗漏了什么,谁能告诉我..

【问题讨论】:

  • cut -d~ -f 1,3-9,13

标签: bash awk


【解决方案1】:

你需要OFS,你可以把print $0改成1

awk -F~ '{$2=$11=$12=""} gsub(/~+/,"~")' OFS="~"
T01~T03~T04~T05~T06~T07~T08~T09~T10~T13

【讨论】:

  • 还不够。他想摆脱那些已删除字段之间的分隔符。试试gsub(),比如:gsub(/~+/, "~")
【解决方案2】:

你可以使用cut:

$ echo "T01~T02~T03~T04~T05~T06~T07~T08~T09~T10~T11~~T13" | cut -d~ -f1,3-10,13
T01~T03~T04~T05~T06~T07~T08~T09~T10~T13

【讨论】:

    【解决方案3】:

    您还需要更改输出字段分隔符:

    awk  -F~ '{$2=$11=$12="";print $0}' OFS="~"
    

    【讨论】:

    • 这会删除这些字段之间的几个分隔符。
    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多