9

これは宿題の質問ではありません。これは古い試験の質問なので、答えを出す人は学業不正に貢献することはありません。まだ懐疑的な人のために、私は単にこれに使用できるコマンドを探しています。

サイズが正確に1メガバイトのone_mbというファイルがあります。そこから正確に128メガバイトのサイズのファイルを作成したいとします。これを行うためのシェルスクリプトを作成してください。これを行うには、最大9行で、ループなし、ifステートメント、再帰、またはその他の論理制御構造を使用します。パラメータを含む各コマンドの長さは100文字未満である必要があります。

私はxargの研究を始めましたが、これを達成するためにxargを使用する良い方法を見つけることができませんでした。

4

6 に答える 6

18

bashを想定すると、1行のブレース拡張ハックを使用できます。

cat one_mb{,}{,}{,}{,}{,}{,}{,} > 128_mb
于 2013-03-20T03:01:53.040 に答える
11

これが重要かどうかはわかりませんが、これが頭に浮かびました。

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

ループは使用されず、パイプとxargs

于 2013-03-20T03:02:35.783 に答える
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
于 2013-03-20T02:54:50.400 に答える
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
于 2013-03-20T03:01:25.730 に答える
2
dd oflag=append conv=notrunc if=/dev/zero of=one_mb bs=1MB count=127

これにより、ファイルの内容が保持され、「ゼロ」レコードの束が追加されて128MBになります。行う

ls -ltrh one_mb

実際に128MBであるかどうかを確認します。そうでない場合は、「count=127」パラメーターを変更する必要があります。

于 2013-03-20T03:06:33.480 に答える
-1

私はあなたが持っている制約でそれで十分だと思います。整数をパラメーターとして受け取る関数を定義できます。0より大きい場合はcat、ファイルをsし、同じ関数を再度呼び出しますが、パラメーターは減少します。

次に、必要な値を使用して関数を呼び出すだけで、完了です。

古き良き再帰:)

(申し訳ありませんが、コーディングには怠惰であり、他にも多くの実用的な答えがあります。再帰が忘れられないようにしたかっただけです:))

于 2013-03-20T03:14:43.027 に答える