【问题标题】:How do i copy every line X line from a bunch of files to another file?如何将一堆文件中的每一行 X 行复制到另一个文件?
【发布时间】:2013-08-14 04:40:46
【问题描述】:

所以我的问题如下: 我有一堆文件,我只需要每个文件中某一行的信息(所有文件的同一行)。 例子: 我想要文件 example_1.dat~example_10.dat 中第 10 行的内容,然后我想将其保存在 > test.dat

我尝试使用:head -n 5 example_*.dat > test.dat。但这给了我从顶部到我选择的行的所有信息,而不仅仅是行。 请帮忙。

【问题讨论】:

    标签: linux shell sed grep cat


    【解决方案1】:
    $ for f in *.dat ; do sed -n '5p' $f >> test.dat ; done
    

    此代码将执行以下操作:

    在以 .dat 结尾的目录中查找文件 f。 在文件的第 5 行使用 sed 并写入 test.dat。 如果存在,“>>”将在文件底部添加行。

    【讨论】:

      【解决方案2】:

      使用headtail 的组合来缩放到所需的行。例如head -n 5 file | tail -n 1

      您可以使用for 循环来完成多个文件

      for f in *.dat ; do head -n 5 $f | tail -n 1 >> test.dat ; done
      

      PS:在运行循环之前不要忘记清理test.dat 文件(> test.dat)。否则,您也会得到以前运行的结果。

      【讨论】:

      • 我工作但它太重(我有大量的文本文件)。我需要像 head -n 5 example_*.dat > test.dat 那样工作的东西(他首先获取所有信息,连接所有信息,然后将其保存到我选择的文件中)。无论如何,我现在会处理这个,谢谢。
      • 我已经更新了答案以包含多个文件的for 解决方案。
      【解决方案3】:

      您可以使用sedawk

      sed -n "5p"
      
      awk "NR == 5"
      

      【讨论】:

      • 我不知道如何使用它,所以我从所有文件中获取信息,然后将其保存到一个新文件中(就像我写的头代码一样)。这样我只能从一个文档中获取该行。
      【解决方案4】:

      这可能对你有用(GNU sed):

      sed -sn '5wtest.dat' example_*.dat
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2018-03-10
        • 2020-06-02
        • 1970-01-01
        • 2011-05-19
        相关资源
        最近更新 更多