File 将具有排序行的文件分割为小文件的shell脚本指令是什么?

File 将具有排序行的文件分割为小文件的shell脚本指令是什么?,file,shell,text,solaris,File,Shell,Text,Solaris,我有一个大文本文件,格式如下: 1 2327544589 1 3554547564 1 2323444333 2 3235434544 2 3534532222 2 4645644333 3 3424324322 3 5323243333 ... 输出应为文本文件,名称中带有后缀,原始文件第一列的编号保留相应输出文件第二列的编号,如下所示: file1.txt: 2327544589 3554547564 2323444333 file2.txt: 323543454

我有一个大文本文件,格式如下:

1 2327544589

1 3554547564

1 2323444333

2 3235434544

2 3534532222

2 4645644333

3 3424324322

3 5323243333

...
输出应为文本文件,名称中带有后缀,原始文件第一列的编号保留相应输出文件第二列的编号,如下所示:

file1.txt:

2327544589

3554547564

2323444333

file2.txt:

3235434544

3534532222

4645644333

file3.txt:

3424324322

5323243333

...

该脚本应该在Solaris上运行,但我也遇到了指令awk和其他指令选项的问题,如-c with cut;它非常有限,所以我正在Solaris上搜索常用命令。我不允许在系统上更改或安装任何内容。使用循环不是很有效,因为脚本处理大文件的时间太长。所以除了使用awk指令和循环之外,还有什么建议吗?

类似这样的建议:

$ awk 'NF>1{print $2 > "file"$1".txt"}' input

$ cat file1.txt 
2327544589
3554547564
2323444333
或者,如果您有可用的bash,请尝试以下操作:

#!/bin/bash

while read a b
do
    [ -z $a ] && continue
    echo $b >> "file"$a".txt"
done < input

也许是这样的:

$ awk 'NF>1{print $2 > "file"$1".txt"}' input

$ cat file1.txt 
2327544589
3554547564
2323444333
或者,如果您有可用的bash,请尝试以下操作:

#!/bin/bash

while read a b
do
    [ -z $a ] && continue
    echo $b >> "file"$a".txt"
done < input

再次抱歉,我不能像我在主要问题中所说的那样使用循环,因为原始文件有很多行。我测试了你的循环,而且用了很多time@user2295976-所有解决方案都涉及显式或隐式循环。上面的循环尽可能轻;文件中的每一行只访问一次,这是你无法克服的!我可以发布一个python和一个perl解决方案,如果您对将文件放入内存感兴趣的话。。。您的输入有多大?在一个用于测试的文件中有一个很大的数字:499997,最终的文件有数百万,但是谢谢您,这个循环现在正在解决问题,如果我能够测试您给出的awk指令:(再次抱歉,我不能像我在主要问题中所说的那样使用循环,因为原始文件有很多行。我测试了你的循环,占用了很多time@user2295976-所有解决方案都涉及显式或隐式循环。上面的循环尽可能轻量级;文件中的每一行只访问一次,您无法击败这!如果您对将文件放入内存感兴趣,我可以发布python和perl解决方案……您的输入有多大?这是一个很大的数字:499997在一个用于测试的文件中,最终的文件有数百万个,但是谢谢您,这个循环现在正在解决问题,如果我能够测试您给出的awk指令:(