2010-10-25 4 views
4

J'essaie de créer un petit script, en utilisant c shell, qui va prendre un fichier composé de plusieurs lignes, chacune contenant un nom et un nombre et une somme de tous les nombres qu'un certain nom. Comment puis-je mettre dans une variable la ligne suivante à chaque fois?Comment puis-je lire une ligne à la fois avec C shell dans unix

la partie summig que je fais par: (après que je serai en mesure d'obtenir une ligne complète à la ligne de $)

set line =($line) 
@ sum = $sum + $line[2] 
+5

[PROGRAMME CSH CONSIDÉRÉ NOCIF] (http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/) peut être pertinent pour ce que vous faites si vous avez le choix votre coquille. C'est un peu une diatribe mais mérite néanmoins d'être lu. –

+0

@Noufal est-ce vraiment nécessaire dans CHAQUE question de csh? –

+1

Je ne cherche pas délibérément de questions 'csh' pour publier ce lien, mais chaque fois que je le vois mentionné (je suis tombé sur cette question en raison de la balise' unix'), je l'apporte car il est très handicapant. Je l'ai travaillé pendant 2 ans et j'ai vraiment souhaité que les gens l'aient jeté avant qu'ils ne commencent. –

Répondre

6

J'ai réussi à le résoudre en utilisant le prochain morceau de code:

foreach line ("`grep $1 bank`") 
    echo $line 
    set line_break = ($line) 
    @ sum = $sum +$line_break[2] 
end 
echo $1\'s balance id: $sum\$ 
-1

Awk peut être appelé à partir d'obus:

% cat >test.dat 
a 1 
a 3 
b 2 
a 7 
b 4 
% awk '($1 == "a") { SUM += $2 } END { print SUM }' < test.dat 
11 
+2

Il a spécifiquement demandé comment faire cela dans cshell. –

+0

il avait besoin de solution CSH, pas AWK, mais je dois convenir :-) en utilisant les outils AWK \ SED est généralement beaucoup mieux que de jouer avec le shell. – codeScriber

+0

En effet, mais c'est la mauvaise façon de le faire, à moins qu'il y ait un peu d'Unix sans awk :-) – Gaius

Questions connexes