9
votes

Chat un fichier plusieurs fois sans boucle

Ce n'est pas une question de devoirs, c'est une question d'un ancien examen. Toute personne donnant une réponse ne contribuera pas à la malhonnêteté académique. Pour ceux toujours sceptiques, je cherche simplement quelle commande je pourrais utiliser pour cela.

Vous avez un fichier appelé One_MB qui est exactement de 1 mégaoctet de taille. Vous souhaitez en créer un fichier exactement de 128 mégaoctets de taille. Veuillez écrire un script shell pour le faire avec au plus 9 lignes et aucune boucle, si des instructions, une récursivité ou toute autre structure de contrôle logique. Chaque commande, y compris les paramètres, doit avoir une longueur inférieure à 100 caractères.

J'ai commencé à rechercher Xarg, mais je ne pouvais pas comprendre un bon moyen de l'utiliser pour y accomplir.


0 commentaires

6 Réponses :


4
votes

Le gros indice ici est que cela peut être "pas plus de 9 lignes". Depuis 2 ^ 7 = 128, il vous suffit de doubler la taille du fichier 7 fois: xxx


3 commentaires

Je suis curieux pourquoi ils ont reçu 9 commandes, puis, au lieu de 7. Chambre pour erreur, je suppose :)


Peut-être que c'est: Ligne 1: Shebang, lignes 2-8: le code ci-dessus, la ligne 9: Nettoyage .. (Suppression des fichiers temporaires)


C'était la méthode dominante.



4
votes

à 100 caractères par commande, vous pouvez le réduire un peu:

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


0 commentaires

18
votes

En supposant que Bash, vous pouvez utiliser un piratage d'expansion de Brace à une ligne:

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


1 commentaires

Je pense qu'il est probablement sûr d'assumer Bash depuis que la question a une balise bash . Mais si je marquais cela, je pourrais bien décoller des marques pour être un ** :- ** :-) Non, pas vraiment, bon hack.



11
votes

Je ne sais pas si cela compte, mais cela vous vint à l'esprit:

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


3 commentaires

Merci d'avoir utilisé Xargs, je ne vois toujours pas comment ça marche, mais c'est un lookininer assez doux


Cette commande simplifiée pourrait vous aider à comprendre ce qui se passe un peu mieux: SEQ 1 10 | Xargs -i {} echo faire {} aussi, consultez les pages de l'homme Xargs!


Merci pour la version simplifiée. Je n'ai pas l'intention de demander des éclaircissements, je respecte la loi de la RTFM. J'ai donc lu la page de l'homme, mais que vous avez des exemples permettant de préciser pour mieux clarifier une description de haut niveau de la fonctionnalité.



2
votes
ls -ltrh one_mb

0 commentaires

-1
votes

Je pense que ce serait suffisant avec les contraintes que vous avez. Vous pouvez définir une fonction qui prend un entier comme paramètre. Si c'est supérieur à 0, cat s est le fichier et appelle la même fonction, mais avec le paramètre diminué.

Ensuite, vous appelez simplement la fonction avec la valeur requise et vous avez terminé.

bonne tol 'Récursion :)

(désolé, trop paresseux pour le codage, et il y a beaucoup d'autres réponses de travail, je voulais juste éviter la récursion d'être oubliée :))


2 commentaires

"S'il vous plaît écrivez un script shell pour le faire avec au plus 9 lignes et nul boucles, si des instructions, Récursion ou toute autre structure de contrôle logique."


C'était vraiment trop tard, je pensais "si des déclarations, une récursivité, etc." étaient autorisées. Ma faute.