2011-08-17 2 views

Répondre

5

Selon le séparateur de colonne, vous pouvez faire quelque chose comme:

cut -f1 orig_file >file1 
cut -f2 orig_file >file2 

Ici, le séparateur de colonne est censé être un TAB. S'il s'agit d'un autre caractère, vous pouvez utiliser l'option -d char pour cut.

Si vous souhaitez supprimer des lignes vides, selon votre demande, vous pouvez ajouter à chaque ligne une commande sed:

cut -f1 orig_file | sed -e /^$/d >file1 
cut -f2 orig_file | sed -e /^$/d >file2 
+0

+1, couper par des séparateurs de champ est préférable si le fichier d'entrée se comporte de cette façon – orip

+0

@Diego Sevilla, comment puis-je supprimer les lignes vides dans les fichiers de résultats? – user881480

+0

@user, voir mon édition. –

1

L'utilisation cut entraînera une commande pour chaque colonne. Vous pouvez le faire en utilisant awk dans une seule commande.

awk '{for (i=1;i<=NF;i++) print $i>i".txt"}' your_file 

Tab est par défaut le séparateur de champs. Incase le séparateur de champ est autre que l'onglet, puis ajouter un drapeau après awk comme ci-dessous

awk -F"<field separator>" '{.... 
1

Vous pouvez couper les parties pertinentes en fonction des indices de caractères:

# assuming constant 5 chars for col1, 5 chars for col2 
cat file | cut -c0-5 | sed '/^\s*$/ {d}' > col1 
cat file | cut -c6-10 | sed '/^\s*$/ {d}' > col2 

Le tuyau sed supprime les lignes vides (ceux avec seulement des espaces blancs). Ils peuvent également être supprimés avec grep -v '^[[:space:]]*$'.

+1

Vous n'avez pas à 'chat 'ici. 'cut' peut aussi lire un fichier. –

+0

@Diego: Bien sûr, c'est une question de style. Je trouve ça bien d'avoir toute la manipulation dans les tuyaux. – orip

Questions connexes