【问题标题】:one liner erase word "id" from first column tab delimited file一个衬垫从第一列制表符分隔的文件中删除单词“id”
【发布时间】:2013-10-20 20:44:31
【问题描述】:

我有一个 10 列的制表符分隔文件,我想从文件第一列的所有条目中删除单词 "id"

是否有一个 awk(或其他 linux 命令行)单行程序可以做到这一点?

即 myfile.withid.txt

id1 1 2 id3 4 5 6 7 8 9
id2 10 20 id30 40 50 60 70 80 90

等等

使用 awk 到 myfile.woid.txt

1 1 2 id3 4 5 6 7 8 9
2 10 20 id30 40 50 60 70 80 90

等等

请注意,"id" 一词已从第一列中删除。

【问题讨论】:

  • 这个问题似乎跑题了,因为它属于Unix & Linux
  • @ColeJohnson:awk 不是一种编程语言吗?

标签: linux awk


【解决方案1】:

这个 awk 单行代码可以做到:

awk -F'\t' '{gsub(/id/,"",$1);print}' file

【讨论】:

  • 我刚刚意识到这个解决方案的输出不会产生一个制表符分隔的文件...否则没有问题。
  • @user2805568 你做awk -F'\t' -v OFS='\t' '....' file 得到制表符分隔的输出。您提到了I would like to erase the word "id" ,但没有明确表示id 只会在第一列中显示一次,并且它应该始终是第一字段的开头。这就是我使用gsub(/id/,"",$1) 的原因,例如可以是3id0id xx xx,当然像id33 xx xx .. 这样的文字也可以
【解决方案2】:

另一个awk

awk '/^id/ {$0=substr($0,3)}1' file
1 1 2 id3 4 5 6 7 8 9
2 10 20 id30 40 50 60 70 80 90

【讨论】:

    【解决方案3】:

    试试:

    awk '{sub (/^id/, "", $0)}{print}' myfile.woid.txt

    查看更多详情:man awkhttp://unixhelp.ed.ac.uk/CGI/man-cgi?awk

    【讨论】:

    • 这可以缩短一些:awk '{sub(/^id/,x,$0)}1'
    【解决方案4】:

    替代解决方案:

     awk 'BEGIN{j=1}{$1=j++; print}'>myfile.woid.txt myfile.wid.txt
    

    【讨论】:

    • 你怎么知道第一列是序号?
    • @Imagination,只是想象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2018-02-07
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多