【问题标题】:How to replace numbers before comma delimiter and autoincrement如何在逗号分隔符和自动增量之前替换数字
【发布时间】:2019-07-17 21:23:12
【问题描述】:

我有一个 txt 文件,大致如下:

1,text,text,text
2,text,text,text
3,text,text,text

但是有更多的行,我只是想用从数字 1000 开始的新数字替换第一个逗号之前的数字,并让它在每一行上自动递增。行数太多,手动操作是行不通的。

我认为我可以使用 sed 或 awk 快速完成此操作,但我太菜鸟了,无法正确处理。我得到的最接近的是使用sed 's/^[^,]*/1000/',但这只是将数字替换为 1000,并且不会在每一行增加它们。

【问题讨论】:

    标签: bash awk sed


    【解决方案1】:

    使用 awk:

    awk 'BEGIN{OFS=FS=","}{$1=NR+999}1' yourfile
    

    这说:

    1. 在处理文件之前,将字段分隔符和输出字段分隔符(FS 和 OFS)设置为逗号BEGIN{OFS=FS=","}
    2. 将第一个字段 ($1) 设置为行号 (NR) 加上 999 {$1=NR+999)}
    3. 打印1

    【讨论】:

    • 那里有一个错字)
    • 略短:awk 'BEGIN{OFS=FS=","}($1=NR+999)'
    • 略短:awk 'BEGIN{OFS=FS=","}($1+=999)'(但 OP 并不清楚第一列当前的内容)
    • 怎么样:awk '$1=++i' {O,}FS=, i=999 file
    • @CasimiretHippolyte 聪明的做法。你能解释一下OFS吗,从来没有见过这样做的。也可以这样写:awk '$1=i++' {O,}FS=, i=1000 file
    【解决方案2】:

    将第一列中的新值与 NR 相关联是一种可行的解决方案。如果您想要更多的灵活性,您可以尝试以下方法:

    awk '$1~/[0-9]+/{$1=v++}1' FS=, OFS=, v=1000 input
    

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2021-12-25
      • 2014-09-10
      相关资源
      最近更新 更多