【问题标题】:Linux shell command to read/print file chunk by chunkLinux shell命令逐块读取/打印文件
【发布时间】:2011-01-24 06:12:58
【问题描述】:

是否有一个标准的 Linux 命令可以用来逐块读取文件? 例如,我有一个大小为 6kB 的文件。我想读取/打印第一个 1kB,然后是第二个 1kB ... 在这种情况下,似乎 cat/head/tail 不起作用。

非常感谢。

【问题讨论】:

    标签: linux file shell


    【解决方案1】:

    您是否尝试真正读取一个文本文件?和你的眼睛一样吗?试试lessmore

    【讨论】:

      【解决方案2】:

      你可以使用fmt

      例如 10 字节

      $ cat file
      a quick brown fox jumps over the lazy dog
      good lord , oh my gosh
      
      $ tr '\n' ' '<file | fmt -w10 file
      a quick
      brown fox
      jumps
      over
      the lazy
      dog good
      lord , oh
      my gosh
      

      每行 10 个字符。如果您想读取第二个块,请将其传递给 awk ..eg

      之类的工具
      $ tr '\n' ' '<file |  fmt -w10 | awk 'NR==2' # print 2nd chunk
      brown fox
      

      将每个块保存到文件,(或者您可以使用 split 和 -b )

      $ tr '\n' ' '<file |  fmt -w10 | awk '{print $0 > "file_"NR}'
      

      【讨论】:

        【解决方案3】:

        dd会做的

        dd if=your_file of=output_tmp_file bs=1024 count=1 skip=0
        

        然后 skip=1 用于第二个块,依此类推。

        然后你只需要读取 output_tmp_file 来获取块。

        【讨论】:

        • 感谢您的回复,看起来很有希望。在我这样做之后: dd if=eco.log bs=1024 count=1 skip=1 (我更喜欢输出到标准输出)我得到了我想要的信息,然后是:0+1 中的 0+1 记录记录了 508 个字节(508 B ) 复制,6.6e-05 秒,7.7 MB/s 我怎样才能忽略上面的 I/O 统计信息?我maned dd,没有这种沉默的选择。
        • 没关系,刚刚发现那些 I/O stat 被输出到 stderr。我可以很容易地忽略这些。谢谢大家!
        【解决方案4】:

        您可以在循环中使用read -n 执行此操作:

        while read -r -d '' -n 1024 BYTES; do
            echo "$BYTES"
            echo "---"
        done < file.dat
        

        【讨论】:

        • 我怎样才能让它以十六进制打印?
        【解决方案5】:

        split 可以根据给定的字节数将文件分割成片段

        【讨论】:

          猜你喜欢
          • 2015-03-30
          • 2010-12-15
          • 1970-01-01
          • 2012-06-22
          • 2013-12-26
          • 2016-01-22
          • 1970-01-01
          • 1970-01-01
          • 2020-01-16
          相关资源
          最近更新 更多