Extraire une ligne entière si un personnage est présent à une certaine position

Je suis un programmeur java et un débutant dans le script shell, j’ai une tâche décourageante d’parsingr des logs de plusieurs gigaoctets et de rechercher des lignes où ‘1’ (juste 1 pas de qoutes) est présent à la 446ème position de la ligne. ce caractère 1 est présent en exécutant ce cat *.log | cut -c 446-446 | sort | uniq -c cat *.log | cut -c 446-446 | sort | uniq -c cat *.log | cut -c 446-446 | sort | uniq -c mais je ne peux pas extraire les lignes et les imprimer dans un fichier de sortie.

 awk '{if (substr($0,446,1) == "1") {print $0}}' file 

est la base.

Vous pouvez utiliser FILENAME dans la fonction d’impression pour append le nom du fichier à la sortie.

 awk '{if (substr($0,446,1) == "1") {print FILENAME ":" $0}}' file1 file2 ... 

IHTH

Essayez d’append grep au tube:

grep '^.\{445\}1.*$'

Vous pouvez utiliser une commande awk pour cela:

 awk 'substr($0, 446, 1) == "1"' file.log 

substr fonction substr aura 1 caractère à la position 446 et == "1" assurera que ce caractère est 1 .

Un autre dans awk. Pour faire un exemple plus sain, nous imprimons des lignes où le troisième caractère est 3:

 $ cat file 123 # this 456 # not this $ awk -F '' '$3==3' file 123 # this 

sur la base de cet exemple mais non testé:

 $ awk -F '' '$446==1' file