Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将使用awk的序列号添加到任何输入文件?_Awk_Sequence - Fatal编程技术网

如何将使用awk的序列号添加到任何输入文件?

如何将使用awk的序列号添加到任何输入文件?,awk,sequence,Awk,Sequence,假设我在文件名Details.txt中有以下数据: 0154 Raghav Sharma 26 Indore 0159 rakh patid 24 Pune 0159 rakh patid 24 Pune 0018 sai kanak 28 mumbai 0159 rakh patid Pune 0159 sarak jatid Pune 现在我已应用以下awk命令生成4位序列号: awk 'BEGIN{a=1;OFS=" "}/^/{$1=s

假设我在文件名Details.txt中有以下数据:

0154 Raghav Sharma 26 Indore 
0159 rakh   patid  24 Pune
0159 rakh   patid  24 Pune
0018 sai    kanak  28 mumbai
0159 rakh   patid     Pune
0159 sarak  jatid     Pune
现在我已应用以下awk命令生成4位序列号:

awk 'BEGIN{a=1;OFS="    "}/^/{$1=sprintf("%04d",a);++a;print $0; next;}{print $0}' Details.txt
输出:

0001 0154 Raghav Sharma 26 Indore 
0002 0159 rakh   patid  24 Pune
0003 0159 rakh   patid  24 Pune
0004 0018 sai    kanak  28 mumbai
0005 0159 rakh   patid Pune
0006 0159 sarak  jatid Pune
最后两行的格式被破坏。请建议一种方法,以便 可以保持正确的格式和正确的序列号

$ # nl command is more apt for numbering files
$ nl -s' ' --number-format=rz -w4 ip.txt
0001 0154 Raghav Sharma 26 Indore 
0002 0159 rakh   patid  24 Pune
0003 0159 rakh   patid  24 Pune
0004 0018 sai    kanak  28 mumbai
0005 0159 rakh   patid     Pune
0006 0159 sarak  jatid     Pune

$ # with awk, leaving this as an alternate to printf solution 
$ awk '{sub(/^/, sprintf("%04d ",++c))} 1' ip.txt
0001 0154 Raghav Sharma 26 Indore 
0002 0159 rakh   patid  24 Pune
0003 0159 rakh   patid  24 Pune
0004 0018 sai    kanak  28 mumbai
0005 0159 rakh   patid     Pune
0006 0159 sarak  jatid     Pune
  • 在此处使用
    sub
    在行首插入文本
    • 更改
      $1
      将强制使用
      OFS
      重新对齐
      $0
      ,而
      将保持其余内容不变
    • 这个特殊的问题恰好可以用这个简单的技巧来解决。通常,如果您有
      gawk
  • sprintf(“%04d”,++c))
    默认情况下,未初始化变量将在数值上下文中为
    0
    (或者只使用
    NR
    ,如其他答案所示)
  • 1
    打印
    $0
  • 在此处使用
    sub
    在行首插入文本
    • 更改
      $1
      将强制使用
      OFS
      重新对齐
      $0
      ,而
      将保持其余内容不变
    • 这个特殊的问题恰好可以用这个简单的技巧来解决。通常,如果您有
      gawk
  • sprintf(“%04d”,++c))
    默认情况下,未初始化变量将在数值上下文中为
    0
    (或者只使用
    NR
    ,如其他答案所示)
  • 1
    打印
    $0

    • 您希望避免重新计算$0;如果这样做,多个空间将压缩为单个空间:

      $ cat Details.txt
      0154 Raghav Sharma 26 Indore
      0159 rakh   patid  24 Pune
      0159 rakh   patid  24 Pune
      0018 sai    kanak  28 mumbai
      0159 rakh   patid     Pune
      0159 sarak  jatid     Pune
      
      $ gawk '{printf "%04d %s\n", NR, $0}' Details.txt
      0001 0154 Raghav Sharma 26 Indore
      0002 0159 rakh   patid  24 Pune
      0003 0159 rakh   patid  24 Pune
      0004 0018 sai    kanak  28 mumbai
      0005 0159 rakh   patid     Pune
      0006 0159 sarak  jatid     Pune
      

      您希望避免重新计算$0;如果这样做,多个空间将压缩为单个空间:

      $ cat Details.txt
      0154 Raghav Sharma 26 Indore
      0159 rakh   patid  24 Pune
      0159 rakh   patid  24 Pune
      0018 sai    kanak  28 mumbai
      0159 rakh   patid     Pune
      0159 sarak  jatid     Pune
      
      $ gawk '{printf "%04d %s\n", NR, $0}' Details.txt
      0001 0154 Raghav Sharma 26 Indore
      0002 0159 rakh   patid  24 Pune
      0003 0159 rakh   patid  24 Pune
      0004 0018 sai    kanak  28 mumbai
      0005 0159 rakh   patid     Pune
      0006 0159 sarak  jatid     Pune
      

      很好地使用了
      NR
      。。。我没有正确地阅读这个问题:-/很好地使用了
      NR
      。。。我没有正确阅读问题:-/