coller des fichiers sans délimiteur

8

Comment joindre deux fichiers verticalement sans séparateur? J'ai essayé d'utiliser paste -d"" a b, mais cela me donne juste a.

Exemple de fichier:

000    0   0   0
0001000200030004
  10  20  30  40
    2000    4000
            .123
            12.1
1234234534564567
Tomas Greif
la source
1
Êtes-vous sûr de ce que vous obtenez? paste - d"" a bcollera le contenu de stdin, fichier nommé d"", a, b.
cuonglm
@cuonglm typo ... fixed.
Tomas Greif
Vous étiez hors d'un caractère: paste -d "" a b.
G-Man dit `` Réintègre Monica '' le

Réponses:

14

pasteutiliser \0pour le délimiteur nul tel que défini par POSIX :

paste -d'\0' file1 file2

L'utilisation -d"" a best la même que -d a b: le pasteprogramme voit trois arguments -d, aet b, ce qui rend ale délimiteur et ble nom du fichier unique à coller.

Si vous êtes sur un système GNU (Linux non embarqué, Cygwin,…), vous pouvez utiliser:

paste -d "" file1 file2

Le formulaire -d ""n'est pas spécifié par POSIX et peut produire des erreurs sur d'autres plateformes. Au moins BSD et heirloom pastene rapporteront aucune erreur de délimiteurs .

cuonglm
la source
3
Soyez prudent lorsque vous essayez de tirer quelque chose du comportement des outils dits "héritage". pastede cette suite a été écrite par Gunnar Ritter et n'est pas liée aux sources UNIX.Le Bourne Shell de cette suite est dérivé du OpenSolaris Bourne Shell, mais a ses propres bogues en raison d'un portage rapide et hacky aux déficits sous Linux ( par exemple une implémentation wait () incompatible), vérifiez (exec ps)pour vérifier un blocage qui n'est pas présent dans l'original et qui n'est pas présent dans mon Bourne Shell portable.
schily
BTW: coller sur Solaris avant ~ avril 2010 donne une erreur "sans délimiteur" avec paste -d '' file1 file2mais depuis, coller est l'implémentation de pâte prise par David Korn et cela permet -d "".
schily
@schily: Que voulez-vous dire par "dériver"? Je mentionne l'héritage pasteparce que je l'avais et que je peux le tester, je ne l'utilise pas pour "standard" ou autre chose.
cuonglm
@schily: Et j'ai également testé avec Solaris 11, cela nepaste donne pas non plus d' erreur de délimiteurspaste -d "" .
cuonglm
Beaucoup de gens croient que les outils avec la marque "héritage" proviennent de sources UNIX originales, mais pas la pâte héritage.
schily
3

La solution est:

paste -d "\0" a b
Tomas Greif
la source