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