11
votes

Comment pouvez-vous regrouper des lignes consécutives à Bash?

J'ai un fichier qui ressemble à ce qui suit: xxx

Je veux reformater cela comme: xxx

Je veux le numéro des colonnes à configurer. Comment voudriez-vous que avec Bash? Je ne peux penser à rien.


0 commentaires

5 Réponses :


20
votes
host:~ user$ cat file
a
b
c
d
e
f
g
h
i
j
k
l
m
host:~ user$ xargs -L3 echo < file
a b c
d e f
g h i
j k l
m
host:~ user$ 
Replace '3' with how many columns you want.

3 commentaires

Ma première pensée était sed 'n; s / \ n / / g' foo ; Pourquoi n'ai-je pas pensé à utiliser xargs pour la manipulation de texte?


Qui devrait être -n3 , pas? -l est - max-lignes , -n est de la - max-args


L'ECHO est l'action par défaut pour le XARGS, donc xargs -l3 :)



4
votes

Un autre: xxx

ou (si vous ne vous souciez pas de la nouvelle ligne finale): xxx


0 commentaires

6
votes

Une version légèrement améliorée de la réponse Xargs serait la suivante:

xargs -n3 -r < file


0 commentaires

1
votes
column -x -c 30 /tmp/file
a       b       c
d       e       f
g       h       i
j       k       l
m
Yes, the spacing isn't exactly what you wanted, but it would handle variable sized inputs "better" (for some definitons of better).

0 commentaires

2
votes

Étant donné que l'opérateur << / code> inverse l'ordre des choses, j'ai compris cette approche plus intuitive: xxx

Cependant, après les tests avec de grands fichiers, le Coller L'approche s'est avérée être beaucoup plus rapide: xxx


0 commentaires