Perl——在写入中间更改文件名

Perl——在写入中间更改文件名,perl,split,increment,large-files,filesplitting,Perl,Split,Increment,Large Files,Filesplitting,我试图在Perl中创建一个超过一百万行的非常大的txt文件,并在Perl中通过一个不同的语句运行它,该语句基本上类似于下面的注释 a=0 b=1 while read line; do echo -n "" > "Write file"${b} a=($a + 1) while ( $a <= 5000) do echo $line >> "Write file"${b} a=($a + 1) don

我试图在Perl中创建一个超过一百万行的非常大的txt文件,并在Perl中通过一个不同的语句运行它,该语句基本上类似于下面的注释

a=0
b=1
while read line;
do
    echo -n "" > "Write file"${b}
    a=($a + 1)
    while ( $a <= 5000)
    do
        echo $line >> "Write file"${b}
        a=($a + 1)
    done
    a=0
    b=($b + 1)
done < "read file"
尝试将每个文件的大小减小到5k行,并在每次filename1.txt、filename2.txt、filename3.txt等文件时递增
这在shell中似乎不起作用,可能是因为输入文件的大小,对于我的生命,我想不出如何改变我在中间写的文件。

你可以在Shell中使用S拆除器。 例如:

split -l 5000 filename.txt filename.txt.
将filename.txt拆分为多个文件,每个文件最多5000行。输出文件的名称为filename.txt.aa、filename.txt.ab、filename.txt.ac等

从我的男人斯普利特:


另外,这是您的固定脚本:

#!/bin/sh
a=0
b=1
while read line; do
    if [ $a -eq 0 ]; then
        echo -n '' > out-file-${b}
    fi

    echo $line >> out-file-${b}

    a=$(( $a + 1 ))
    if [ $a -eq 10 ]; then
        a=0
        b=$(( $b + 1 ))
    fi
done < in-file

用bash和dash进行测试。

我很惊讶这被接受为答案。使用split会更好。如果可以的话,我会将此作为一条评论发布,因为它是为了帮助您在未来的工作中,而不是在这个特殊情况下。因为当我们谈论一次拆分导致的数百个文件时,拆分对于文件命名来说太混乱了。。我需要一个增量计数器来保持整洁。这与split的功能有什么不同?split将使用file.txt.aa、file.txt.ab等。用于文件传输和自动读取到另一个团队的unix机箱和无法运行的表中。至少不是为了我为之制作的团队。。。他们想要file0001.txt、file0002.txt等等,这就是为什么split对我不起作用的原因,否则我会首先使用它
#!/bin/sh
a=0
b=1
while read line; do
    if [ $a -eq 0 ]; then
        echo -n '' > out-file-${b}
    fi

    echo $line >> out-file-${b}

    a=$(( $a + 1 ))
    if [ $a -eq 10 ]; then
        a=0
        b=$(( $b + 1 ))
    fi
done < in-file