在Unix中合并来自特定行的两个大文件

在Unix中合并来自特定行的两个大文件,unix,awk,Unix,Awk,我有两个大文件,我想合并成一个文件,并将其gzip。但是对于第二个文件,我想排除前两行。我怎么做?到目前为止,我所做的是: awk'FNR>2'/application/psmcHard_0.msOut.gz/JPT/psmcHard_0.msOut.gz>/all_data/psmcHard_0.msOut 你认为这是正确的方法吗?我怎样才能压缩文件?您输入的文件是用“.gz”压缩的,awk将无法直接处理它们。您必须解压文件,对其进行压缩,然后重新压缩文件 ( # Pass first

我有两个大文件,我想合并成一个文件,并将其gzip。但是对于第二个文件,我想排除前两行。我怎么做?到目前为止,我所做的是:


awk'FNR>2'/application/psmcHard_0.msOut.gz/JPT/psmcHard_0.msOut.gz>/all_data/psmcHard_0.msOut

你认为这是正确的方法吗?我怎样才能压缩文件?

您输入的文件是用“.gz”压缩的,awk将无法直接处理它们。您必须解压文件,对其进行压缩,然后重新压缩文件

(
  # Pass first file as-is (no need to unzip/rezip)
  cat /application/psmcHard_0.msOut.gz
  # Unzip second file, filter required lines, and re-zip
  zcat /JPT/psmcHard_0.msOut.gz | awk 'FNR > 2' | gzip
) > /all_data/psmcHard_0.msOut.gz

一旦fle被gzip处理,它就是二进制数据,
awk
就不能处理二进制数据,也不能指望找到任何“行”。您必须解压缩文件,然后运行awk脚本来删除这两行代码。您可以像
{cat firstfile.txt;awk'NR>2'secondFile;}| gzip-c>fileout.gz
(或类似内容)那样通过管道进行工作。使用进程分组(使用
{…}
),将封闭进程的所有输出发送到管道,并最终发送到
gzip
。祝您好运。谢谢。由于我是stackoverflow新手,无法对注释进行投票