代码之家  ›  专栏  ›  技术社区  ›  Nicholas M T Elliott

头的反面是什么?我要一个文件的前N行以外的所有行

  •  120
  • Nicholas M T Elliott  · 技术社区  · 14 年前

    给定一个未知长度的文本文件,我如何读取,例如all 但是 文件的前两行?我知道 tail 会给我最后的N行,但我不知道N是什么提前。

    AAAA
    BBBB
    CCCC
    DDDD
    EEEE
    

    我想要

    CCCC
    DDDD
    EEEE
    

    为了一个文件

    AAAA
    BBBB
    CCCC
    

    我只想

    CCCC
    
    8 回复  |  直到 9 年前
        1
  •  230
  •   Riccardo    8 年前

    tail --help 提供以下信息:

      -n, --lines=K            output the last K lines, instead of the last 10;
                               or use -n +K to output lines starting with the Kth
    

    所以要过滤掉第一个 2 线, -n +3 应该给你的输出,你正在寻找(从第三开始)。

        2
  •  23
  •   Nathan Fellman    14 年前

    假设您的tail版本支持它,您可以指定在X行之后开始tail。在你的情况下,你会做2+1。

    tail -n +3
    
    [mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt
    CCCC
    DDDD
    EEEE
    
        3
  •  12
  •   janm    14 年前

    awk 'NR > 2 { print }' file.name
    
        4
  •  9
  •   lhf    14 年前

    尝试 sed 1,2d . 根据需要更换2个。

        5
  •  6
  •   Jim Lewis    12 年前

    tail -n +linecount filename linecount 属于 filename ,所以 tail -n +3 filename 你应该做你想做的。

        6
  •  0
  •   t0mm13b    14 年前

    tail --lines=3 sample1.dat 它将打印从第三行到最后一行的所有行。

    tail --lines=-1 sample2.dat 打印最后一行。。。

        7
  •  0
  •   NawaMan    14 年前

    我真的不知道怎么做,只是从尾巴或头部,但在帮助 wc -l

    tail -$(( $( wc -l $FILE | grep -Eo '[0-9]+' ) - 2 )) $FILE

    希望这有帮助。

        8
  •  -1
  •   ghostdog74    14 年前

    awk 'FNR==NR{n=FNR}FNR<=n-3{print}' file file
    

    除了前两行以外,我都要走了

    awk 'NR>2' file
    

    或者你可以用更多

    more +2 file
    

    #!/bin/bash
    
    i=0
    while read -r line
    do
      [[ $i > 1 ]] && echo "$line"
      ((i++))
    done <"file"
    
    推荐文章