【问题标题】:Split File into chunks keeping complete lines in solaris将文件拆分成块,在 solaris 中保持完整的行
【发布时间】:2014-11-13 20:14:48
【问题描述】:

如何将一个文件拆分为 3 个行数相等(或几乎相等)的文件而不会断行。 例如,将一个 25 行的文件拆分为 3 个文件,每个文件 9,8 和 8 行。 我知道split -n l/3,但不适用于 Solaris10。 尝试了一些我上网的东西,但没有给出想要的结果,例如:

!/usr/bin/ksh
fspec=~/input.list
num_files=3
total_lines=$(wc -l <${fspec})
((lines_per_file = (total_lines + num_files - 1) / num_files))
split -l ${lines_per_file} ${fspec} files.

【问题讨论】:

  • 请展示您的尝试并解释您遇到的问题
  • @Jotne:如果这就是他所尝试的全部范围,那么他不值得任何帮助
  • @Borodin,尝试了一些我上网但没有给出预期结果的东西,例如:#!/usr/bin/ksh fspec=~/input.list num_files=3 total_lines=$(wc -l &lt;${fspec}) ((lines_per_file = (total_lines + num_files - 1) / num_files)) split -l ${lines_per_file} ${fspec} files.
  • @user3437245:请通过编辑您的问题添加此类信息。与其到处寻找现成的解决方案来解决您的问题,尤其是 Korn shell 解决方案,您自己想一个解决方案难道不感兴趣吗?你知道任何编程语言吗?到目前为止,听起来你真的是做错了。

标签: perl shell awk solaris solaris-10


【解决方案1】:

这是awk为您提供的通用解决方案

awk '{a[NR]=$0}  END {t=int (NR/s);r=((NR/s-t)*s);while (n<s) for (i=t*n+++1;i<=t*n;i++) print a[i] > "file"n;while (i++<=NR) print a[i-1] > "file"n}' s=3 infile

这会将infile 拆分为s 文件数。如果你设置s=3 你会得到file1 file2 file3
不分割的数据,在最后一个文件中结束。


例子

cat number
1       one
2       two
3       three
4       four
5       five
6       six
7       seven
8       eight
9       nine
10      ten

awk '{a[NR]=$0}  END {t=int (NR/s);r=((NR/s-t)*s);while (n<s) for (i=t*n+++1;i<=t*n;i++) print a[i] > "file"n;while (i++<=NR) print a[i-1] > "file"n}' s=3 number

cat file1
1       one
2       two
3       three

cat file2
4       four
5       five
6       six

cat file3
7       seven
8       eight
9       nine
10      ten

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2010-11-02
    相关资源
    最近更新 更多