Je suis nouveau dans awk et je ne sais pas s'il est possible d'écrire un script awk qui fait ceci:
J'ai des centaines de fichiers de données que je dois trier. Pour chacun, j'utilise le one-liner suivant:
awk 'ORS=NR%3?" ":"\n" ' file1.tex > file1_sorted.tex
awk 'ORS=NR%3?" ":"\n" ' file2.tex > file2_sorted.tex
...
et j'obtiens la sortie dont j'ai besoin. Cependant, j'aimerais avoir un script pour automatiser cette action, en prenant chaque fichier, en appliquant l'action et en écrivant le fichier trié correspondant.
J'apprécierais votre aide!
FNR==1
fait. =)Vous pouvez appliquer les fichiers dans une boucle for:
Ou sur une seule ligne:
Puisque vous ne spécifiez pas quel shell, optez plutôt pour le plus standard en
basename
utilisant la syntaxe spécifique au shell${file%%.tex}
.la source
shell
) et exécuter les commandes ci-dessus à l'intérieur à l'invite. Ou ouvrez un terminal et exécutez-y la commande. Il existe deux façons de spécifier (awk, shell, etc.) des scripts: soit sur la ligne de commande, soit dans un fichier. Votreawk
commande dans la publication utilise le formulaire de ligne de commande; ma commande "une ligne" est également un formulaire en ligne de commande.Vieille question mais étant donné que la dernière fois que j'ai vu un ordinateur personnel monocœur, c'était il y a une décennie, vous pouvez utiliser gnu parallel
Pour résoudre l'expansion du shell et l'interprétation des citations
Utilisez le bon glob pour sélectionner les fichiers d'entrée. Ici, j'utilise
{.}
pour retirer l'extension du nom de sortie car je l'ajoute ensuiteoù
X
est le nombre de processeurs que vous souhaitez utiliser, vous pouvez toujours en utiliser 1. Cela vous donneraitfile[1-9]_sorted.tex
comme sortiesla source