【问题标题】:Add a serial number as sequence to each line in a file in UNIX at specific position将序列号作为序列添加到 UNIX 中特定位置的文件中的每一行
【发布时间】:2019-10-24 14:30:59
【问题描述】:

我有一个 Unix 文件,其中多行和字段以逗号分隔。 我需要在每行中插入一个新字段作为逗号后第三个位置的序列号(1,2,3 ..)

之前的文字

roy,mike,apple,alex
roy,apple,water,joe
lemon,tony,juice,fred

文本之后

roy,mike,apple,1,alex
roy,apple,water,2,joe
lemon,tony,juice,3,fred

【问题讨论】:

标签: shell unix awk sed


【解决方案1】:

虽然链接是oguz ismail分享的,但似乎链接的解决方案与这个问题相比有点复杂,所以在这里添加一个简单的。

awk 'BEGIN{FS=OFS=","} {$NF=++count OFS $NF} 1'  Input_file

或者根据 anubhava 先生的评论,您也可以尝试关注。

awk 'BEGIN{FS=OFS=","} {$NF = FNR OFS $NF} 1' Input_file

这些解决方案假定必须在最后一个字段 ($NF) 之前插入序列号,如问题所示。

FNR 是单个输入文件中的记录号。如果您在命令行上指定了多个文件,则对于每个新文件,此数字将跳回 1。如果您希望序列号继续计算所有输入文件,请使用 NR 而不是 FNR

【讨论】:

    【解决方案2】:

    这应该是一个更正确的答案,因为它要求在 3 列之后插入一个字段,而不是像 Ravinders 答案中的倒数第二个

    awk -F, -v OFS=, '{$3=$3FS FNR}1' file
    roy,mike,apple,1,alex
    roy,apple,water,2,joe
    lemon,tony,juice,3,fred
    

    【讨论】:

      【解决方案3】:
      awk -F, -vOFS=, '{$4=NR}1' filename
      

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 2017-10-30
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多