Cat A文件多次没有A循环

时间:2013-03-20 02:48:46

标签: bash shell unix

这不是一个家庭作业问题,这是旧考试的问题,所以任何给出答案的人都不会对学术不诚实做出贡献。对于那些仍然持怀疑态度的人,我只是在寻找可以用于此的命令。

你有一个名为one_mb的文件,其大小正好是1兆字节。您希望从中创建一个大小为128 MB的文件。请编写一个shell脚本来执行此操作,最多9行,没有循环,if语句,递归或任何其他逻辑控制结构。每个命令(包括参数)的长度必须小于100个字符。

我开始研究xarg,但无法找到一种好方法来实现它。

6 个答案:

答案 0 :(得分:17)

假设bash,你可以使用单行大括号扩展黑客:

cat one_mb{,}{,}{,}{,}{,}{,}{,} > 128_mb

答案 1 :(得分:10)

不确定这是否重要,但想到了这一点:

seq 1 128 | xargs -Inone cat one_mb >> 128_mb

没有使用循环,只是一个管道和xargs

答案 2 :(得分:4)

这里的一个重要提示是它可以“不超过9行”。由于2 ^ 7 = 128,您只需要将文件大小加倍7倍:

cat one_mb one_mb > two_mb
cat two_mb two_mb > four_mb
...
cat 64_mb 64_mb > 128_mb

答案 3 :(得分:4)

每个命令100个字符,你可以减少它:

cat one_mb one_mb one_mb one_mb one_mb one_mb one_mb one_mb >mb8
cat mb8 mb8 mb8 mb8 >mb32
cat mb32 mb32 mb32 mb32 >mb128
rm -f mb8 mb32

答案 4 :(得分:2)

dd oflag=append conv=notrunc if=/dev/zero of=one_mb bs=1MB count=127

这将保留文件内容并添加一堆“零”记录,使其为128 MB。做

ls -ltrh one_mb

检查它是否实际为128MB,否则您可能需要更改“count = 127”参数。

答案 5 :(得分:-1)

我认为你的约束就足够了。您可以定义一个以整数作为参数的函数。如果它大于0,cat s文件并再次调用相同的函数,但参数减少。

然后你只需用所需的值调用函数,就完成了。

好的'递归')

(抱歉,编码太懒了,还有很多其他工作的答案,只是想避免被遗忘的递归:))