【问题标题】:Unix: merge many files, while deleting first line of all filesUnix:合并许多文件,同时删除所有文件的第一行
【发布时间】:2023-03-24 00:55:01
【问题描述】:

我有超过 100 个文件需要合并,但必须删除每个文件的第一行。在 Unix 下最有效的方法是什么?我怀疑这可能是一个使用 catsed '1d' 的命令。所有文件都具有相同的扩展名并且位于同一个文件夹中,因此我们可能可以使用 *.extension 来指向这些文件。非常感谢!

【问题讨论】:

  • 要删除第一行,请参见例如tail (tail -n +2 file)。
  • @Someprogrammerdude 应该使用tail -q -n +2 file,以避免输出标头给出文件名。

标签: bash merge


【解决方案1】:

假设您的文件名按照您希望文件附加的顺序排序,您可以使用:

ls *.extension | xargs -n 1 tail -n +2

编辑:在 Sorin 和 Gilles 了解管道 ls 输出可能存在的危险之后,您可以使用:

find . -name "*.extension" | xargs -n 1 tail -n +2

【讨论】:

  • 是的,就是这个! :) 谢谢!
  • -1 用于管道 ls 输出到某物,ls 不是为此而设计的,请使用 find
  • 在什么情况下这会是坏索林?
  • 您能否提供管道 ls 输出可能存在问题的链接?谢谢
  • 上述参考将解析ls 的输出与进行内部字符串操作(如for x in *.txt)进行了比较。它不会将解析ls 的输出与解析find 的输出进行比较。根据相同的逻辑,两者都是“坏的”。
【解决方案2】:

每个人都必须是复杂的。这真的很简单:

tail -q -n +2 file1 file2 file3

等等。如果您有大量文件,您可以先将它们加载到数组中:

list=(file1 file2 file3)
tail -q -n +2 "${list[@]}"

当前目录中具有给定扩展名的所有文件?

list=(*.extension)
tail -q -n +2 "${list[@]}"

或者只是

tail -q -n +2 *.extension

【讨论】:

  • 我尝试了tail -n +2 *.extension。我使用的 tail 版本返回 tail: Can only process one file at a time. 以便解释更复杂的答案。
【解决方案3】:

只需在删除第一行后追加每个文件。

#!/bin/bash

DEST=/tmp/out
FILES=space separated list of files

echo "" >$DEST
for FILE in $FILES
do
    sed -e'1d' $FILE >>$DEST
done

【讨论】:

    【解决方案4】:

    tail 输出文件的最后几行。您可以告诉它要打印多少行,或者在开头省略多少行(-n +N 其中 N 是要打印的第一行的编号,从 1 开始计数 - 所以+2 省略了一行)。使用 GNU 实用程序(即在 Linux 或 Cygwin 下)、FreeBSD 或其他具有 -q 选项的系统:

    tail -q -n +2 *.extension
    

    tail 在每个文件之前打印一个标题,-q 不是标准的。如果您的实现没有它,或者为了可移植,您需要遍历文件。

    for x in *.extension; do tail -n +2 <"$x"; done
    

    或者,您可以调用 Awk,它可以识别每个文件的第一行。如果您有很多小文件,这可能会更快,如果您有很多大文件,这可能会更慢。

    awk 'FNR != 1' *.extension
    

    【讨论】:

      【解决方案5】:
      ls -1 file*.txt | xargs nawk 'FNR!=1'
      

      【讨论】:

        猜你喜欢
        • 2014-12-03
        • 2021-07-25
        • 2020-06-12
        • 1970-01-01
        • 2017-11-19
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 2012-03-26
        相关资源
        最近更新 更多