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指令:(