8
votes

Puis-je modifier l'ordre des champs de sortie de la commande Linux Cut?

J'utilise la commande coupée dans la ligne de commande et semble que je ne peux pas obtenir la sortie que j'aime. Avez-vous une idée pourquoi je reçois cela? Est-ce quelque chose que je fais mal?

Ceci est la sortie normale et je souhaite sortir dans une commande différente: xxx

mais comme vous pouvez le voir, ce n'est pas Travailler comme prévu. Une idée pourquoi ils changent de place?


4 commentaires

Devinez que vous souhaitez modifier l'ordre des champs, vous pouvez utiliser n'importe quel nombre d'autres outils, comme SED. En utilisant SED, vous pouvez écrire une commande de substitution pour résoudre ce problème.


Oui, c'est ce que je veux faire, mais je ne sais pas pourquoi cela ne fonctionne pas avec la coupe.


Selon la page Man, la coupe ne fait pas cela.


Ne pas analyser la sortie de ls .


3 Réponses :


6
votes

couper ne réorganise pas sa sortie. Il recueille simplement une liste des colonnes à imprimer, puis les imprime à leur arrivée.

Utilisez un outil différent tel que AWK pour réorganiser des colonnes de sortie.

Toutefois, dans ce cas patriculaire, essayez avec stat ou Rechercher au lieu de ls . Il n'est généralement pas recommandé d'essayer d'analyser la sortie de ls . Voir http://mywiki.woolgedge.org/parsingls


0 commentaires

24
votes

de homme coupé :

L'entrée sélectionnée est écrite dans le même ordre qu'il est lu et est écrit exactement une fois.

Utilisez awk '{IMPRESS $ 5, 6 $, 7 $ 7, $ 8, $ 8, $ 3, $ 4, $ 1}' au lieu de . .


2 commentaires

Bien sûr que cela ne fonctionnera pas si un nom de fichier a un ou plusieurs espaces dedans ...


@MatSpetersson Oui, bon point mais non plus couper !



6
votes

Comme d'autres personnes ont mentionné, ne pas analyser LS. Si vous souhaitez des informations de fichier, utilisez STAT code>

$ ls -l data
-rw-r--r-- 1 glennj glennj 13 2013-01-01 11:19 data
$ LC_TIME=POSIX ls -l data
-rw-r--r-- 1 glennj glennj 13 Jan  1 11:19 data

$ stat -c "%s %y %U %G %A %n" data 
13 2013-01-01 11:19:53.670015242 -0500 glennj glennj -rw-r--r-- data
$ stat -c "%s %Y %U %G %A %n" data | awk '{$2 = strftime("%b %e %H:%M", $2)} 1'
13 Jan  1 11:19 glennj glennj -rw-r--r-- data


0 commentaires