2010-06-08 1 views
2

Étant donné un fichier texte censé contenir 10 colonnes délimitées par des tabulations (soit 9 onglets), j'aimerais trouver toutes les lignes qui ont plus de 10 colonnes (plus de 9 onglets). Chaque rangée se termine par CR-LF.Code/Approche Golf: Trouver une ligne dans un fichier texte avec trop de colonnes

Ne tenez pas compte des données, des largeurs de champ, etc., autres que celles indiquées ci-dessus.

Les commentaires concernant l'approche, et/ou le code de travail seraient extrêmement appréciés. Bonus pour l'impression des numéros de ligne des lignes incriminées.

Merci d'avance!

EDIT, comme souligné par le commentateur (merci!), Vous pouvez supposer que les données ne contiennent pas de tabulations ou CRLF.

+0

Si les "données" contient des onglets ou CRLF de, vous n'allez pas être en mesure de le faire de manière fiable compte tenu des informations ci-dessus. Sinon, c'est juste un CSV; tout analyseur fera l'affaire. – user358390

Répondre

3
awk -F'\t' 'NF>10{print}' <filename> 

Ou, avec les numéros de ligne:

awk -F'\t' 'NF>10{print NR; print}' <filename> 
+0

Gagnant, gagnant, souper au poulet. Je pense que je dois spécifier 'awk -F" \ t "'NF> 10 {print NR": "; imprimer} '' mais à part cela, semble fonctionner. Merci. – awshepard

+0

Ah, vous avez raison. Sans spécifier le séparateur de champs, cela ne fonctionnerait que si aucun champ ne contenait d'espace. Mettra à jour ma réponse. – danben

4

Il suffit d'utiliser une expression régulière:

(.*\t){10,}

Questions connexes