2009-01-14 6 views
3

J'ai un fichier 'records.txt' qui contient plus de 200 000 enregistrements.Numéro de comptage de Delimiter dans une ligne dans un fichier sous Unix

Chaque enregistrement se trouve sur une ligne distincte et comporte plusieurs champs séparés par un délimiteur '|'.

Chaque ligne doit comporter 35 champs, mais le problème est l'une de ces lignes. <> 35 champs, c'est-à-dire <> 35 '|' personnages.

Quelqu'un peut-il suggérer un moyen d'Unix, par lequel je peux identifier la ligne. (Comme obtenir le nombre de « | » caractères dans chaque ligne dans le fichier)

Répondre

11

Essayez ceci:

awk -F '|' 'NF != 35 {print NR, $0} ' your_filefile 
+0

+1, u me tabassaient par 24secs :) –

+1

Heh. J'aime ça :) –

1

Ce petit script perl devrait le faire:

cat records.txt | perl -ne '$t = $_; $t =~ s/[^\|]//g; print unless length($t) == 35;' 

Cela fonctionne en supprimant tous les caractères sauf le |, puis compter ce qui reste.

+0

utilisation inutile de cat détecté ici ... – Keltia

1

façon de Greg avec des trucs bash, pour les bash amis là-bas :)

while read n; do [ `echo $n | tr -cd '|' | wc -c` != 35 ] && echo $n; done < records.txt 
+0

Je voulais juste trouver une rangée qui a plus de N (35 ici) séparateurs. Greg et les vôtres, les deux codes fonctionnent. Merci :) –

Questions connexes