代码之家  ›  专栏  ›  技术社区  ›  bastibe

如何将两个文件放在一起,但分别忽略最后一行/第一行?

  •  13
  • bastibe  · 技术社区  · 14 年前

    我有两个文件要一起查。但是,应省略第一个文件的最后一行和最后一个文件的第一行。

    我确信这可以在unixshell(或者更确切地说,Cygwin)中完成。但是怎么做呢?

    7 回复  |  直到 14 年前
        1
  •  18
  •   Frank    14 年前
    $ head --lines=-1 file1 > res
    $ tail --lines=+2 file2 >> res
    
        2
  •  3
  •   Marco    14 年前

    您可以使用:

    head -n -1 file1 && tail -n +2 file2
    

    head显示文件的第一行,param-n显示文件的前n行,但是如果在数字前面加上-,它将显示除最后n行以外的所有文件。

    尾巴是模拟的。。

    为了更好的参考:

    head

    tail

        3
  •  2
  •   codaddict    14 年前
    head -n -1 file1
    

    将打印中的所有行 file1 除了最后一行。

    tail -n +2 file2
    

    file2 除了第一行。

    head -n -1 file1 ; tail -n +2 file2
    
        4
  •  2
  •   ghostdog74    14 年前
    awk 'FNR>2{print p}{p=$0}' file1 file2
    

    FNR是当前正在处理的文件的当前记录号。

        5
  •  2
  •   gumption    11 年前

    head -n -1 file1
    

    上面的命令生成以下错误消息:

    head: illegal line count -- -1
    

    在Mac OS X版本的head中,似乎不接受-n参数的负值。但是,您可以改用sed:

    sed -e '$d' file1
    

        6
  •  2
  •   glenn jackman    11 年前

    我经常使用 sed 对于头部|尾部动作:

    { sed '$d' file1; sed '1d' file2; } > combined
    
        7
  •  1
  •   paxdiablo    14 年前

    下面的文字记录显示了如何做到这一点:

    pax> cat file1.txt
    1.1
    1.2
    1.3
    1.4
    1.5
    
    pax> cat file2.txt
    2.1
    2.2
    2.3
    2.4
    2.5
    
    pax> head --lines=-1 file1.txt ; tail --lines=+2 file2.txt
    1.1
    1.2
    1.3
    1.4
    2.2
    2.3
    2.4
    2.5
    

    head 命令一个负数就会一直到最后。类似地,以 + tail 从那一行开始,而不是从那一行开始。