2010-10-02 4 views

Répondre

4

Quelque chose comme cela devrait fonctionner (je ne l'ai pas testé):

while read num rest; do 
    echo "$num $rest" >> "filename.$num" 
done < inputFile 

read lirai ligne de texte, puis s pliez-le sur les espaces en "mots", comme lorsque vous exécutez une commande. Il attribuera le premier "mot" au premier nom de variable (num dans ce cas - qui obtiendra le numéro), le second "mot" au deuxième nom de variable (rest), et ainsi de suite. S'il n'y a plus de variables, il ajoutera le reste de la ligne à la dernière variable (rest, ici).

read Lorsque read traite une ligne avec succès, elle renvoie zéro, ce qui est "succès" dans le script de shell, de sorte que la boucle while continuera, en lisant les lignes suivantes. Lorsque read atteint la fin du fichier, il renvoie 1, arrêtant la boucle while.

4
awk '{print $2 >> "filename."$1 }' filename 

Si vous voulez que la ligne entière :

awk '{print $0 >> "filename."$1 }' filename 
0

utilisant bash pour les boucles, couper et grep

for i in `cut -s -d ' ' -f 1 input.txt`; do 
    grep ^$i input.txt > filename.$i 
done; 
Questions connexes