将列添加到文本文件中,其中值为行号?

use*_*308 4 text-processing

如何在文本文件中添加一列,其中的值是行号?

之前的文件:

Foo Ba Lk Q
Lorem ipsum doler
Run Code Online (Sandbox Code Playgroud)

文件后

1 Foo Ba Lk Q
2 Lorem ipsum doler
Run Code Online (Sandbox Code Playgroud)

等等

ter*_*don 7

几种不同的方法:

  1. $ cat -n file
        1   Foo Ba Lk Q
        2   Lorem ipsum doler
    
    Run Code Online (Sandbox Code Playgroud)
  2. 珀尔

    perl -pe 's/^/$. /' file
    
    Run Code Online (Sandbox Code Playgroud)

    -pe意思是“由施加给定的脚本后打印每个输入线路-e到它”。然后,我们将^(行首)替换为行号 ( $.) 和一个空格。

    或者,由于这是 Perl 和TIMTOWTDI

    perl -ne 'print "$. $_"' file 
    perl -pe '$_ = "$. $_"' file 
    
    Run Code Online (Sandbox Code Playgroud)

    在所有这些示例中,如果要修改原始文件,请使用-i

    perl -i -pe 's/^/$. /' file
    perl -i -ne 'print "$. $_"' file 
    perl -i -pe '$_ = "$. $_"' file 
    
    Run Code Online (Sandbox Code Playgroud)
  3. awk

    $ awk '{print NR,$0}' file
    1 Foo Ba Lk Q
    2 Lorem ipsum doler
    
    Run Code Online (Sandbox Code Playgroud)

    特殊变量NR是当前行号和$0当前行。要在原始文件中进行更改(假设您有足够新的 GNU awk 版本),请执行以下操作:

    gawk -iinplace '{print NR,$0}' file
    
    Run Code Online (Sandbox Code Playgroud)
  4. sed

    $ sed = file | sed 'N;s/\n/\t/'
    1   Foo Ba Lk Q
    2   Lorem ipsum doler
    
    Run Code Online (Sandbox Code Playgroud)

    =手段“的每行前打印行数”。但是,这会将数字单独打印在一行上,并在其下打印输入行。第二个sed命令再次将它们放回同一行。