2010-02-04 13 views
0

Je suis récemment tombé sur ce bug de script fou sur l'une de mes machines Solaris. J'ai trouvé que couper sur Solaris saute des lignes des fichiers qu'il traite (ou au moins de très gros - 800 Mo dans mon cas).Sous Solaris, quelle est la différence entre cut et gcut?

> cut -f 1 test.tsv | wc -l 
    457030 
> gcut -f 1 test.tsv | wc -l 
    840571 
> cut -f 1 test.tsv > temp_cut_1.txt 
> gcut -f 1 test.tsv > temp_gcut_1.txt 
> diff temp_cut_1.txt temp_gcut_1.txt | grep '[<]' | wc -l 
     0 

Ma question est quoi diable se passe-t-il avec Solaris cut? Ma solution est de mettre à jour mes scripts pour utiliser gcut mais ... qu'est-ce qui se passe?

Répondre

0

gcut est presque certainement GNU cut, et l'autre est probablement dérivé de la coupe System V d'origine. Code dans ce dernier pourrait en fait revenir à l'original AT & sources T Unix. Les utilitaires GNU se sont mis en route avant de devenir l'un des éléments fondamentaux des systèmes d'exploitation modernes tels que Linux et OS X. Dans les années 80, beaucoup d'administrateurs système les installaient par-dessus les systèmes par défaut, ou placez-les dans un répertoire dans le PATH avant ceux du système. Une des raisons pour lesquelles de nombreux administrateurs système les préféraient est qu'ils avaient souvent moins de limitations arbitraires que les utilitaires "natifs". Apparemment, le programme de coupe sur votre boîte Solaris a encore des limites boiteuses. Je testerais cela sur une autre boîte fonctionnant sous un OS différent, pour m'assurer que rien d'autre ne se passe, comme un deal Unicode bizarre.

1

Je n'ai jamais entendu parler de gcut dans Solaris. faire un homme gcut ou gcut --help pour voir ce que c'est. Pour jouer en toute sécurité, utilisez la coupe. Sinon, vous pouvez simplement utiliser nawk. par exemple (pour ce que vous essayez de faire)

nawk '{print $1}END{print "Total count:"NR}' 

depuis obtenir le champ 1 et faire wc est le même que compter les lignes, il suffit de faire wc -l < file