web-dev-qa-db-fra.com

imprimer chaque nième ligne d'affilée en utilisant gawk

J'ai un très gros fichier dans lequel j'ai besoin d'obtenir chaque nième ligne et de l'imprimer en ligne.

Mes données:

1      937  4.320194
2      667  4.913314
3      934  1.783326
4      940  -0.299312
5      939  2.309559
6      936  3.229496
7      611  -1.41808
8      608  -1.154019
9      606  2.159683
10     549  0.767828

Je veux que mes données ressemblent à ceci:

1      937  4.320194
3      934  1.783326
5      939  2.309559
7      611  -1.41808
9      606  2.159683

Ceci est bien sûr un exemple, je veux une ligne sur 10 pour mon énorme fichier de données. J'ai essayé jusqu'à présent:

 NF == 6 {
     if(NR%10) {print;}
     }
23
user1269741

Pour imprimer une ligne sur deux, en commençant par la première:

awk 'NR%2==1' file.txt

Pour imprimer chaque dixième ligne, en commençant par la dixième ligne:

awk 'NR%10==0' file.txt

Pour l'utiliser dans un script, ajoutez ce qui suit à un fichier appelé script.awk:

BEGIN {
    print "Processing file"
}

NR%10==0

END {
    print "Finished processing"
}

Exécutez ensuite:

awk -f script.awk file.txt
50
Steve

Avec sed, vous pouvez faire beaucoup de variations assez facilement avec le first~step commande. Par exemple:

# Odd lines
sed -n 1~2p file
# Every tenth line (10, 20, 30, ...)
sed -n 10~10p file
# Every tenth line (1, 11, 21, ...)
sed -n 1~10p file
# First plus every tenth (1, 10, 20, 30, ...)
sed -n -e 1p -e 10~10p file
16
Kevin

Part de gâteau: cat test.txt | awk 'NR % 10 == 1'

9
Johan Kotlinski

Ce n'est pas (g) awk, mais ça marchera:

cat myfile | grep ^[[:digit:]]*0[[:blank:]] devrait faire l'affaire.

2
Mahmoud Al-Qudsi

Le faire directement dans l'invite de commande (Windows).

Placez le fichier gawk.exe dans le dossier où se trouve le fichier et lancez une invite de commande dans le dossier, puis écrivez

gawk "NR%n==x" oldfile.txt>newfile.txt

n est la quatrième ligne que vous souhaitez imprimer et x est la ligne de départ.

Par exemple, n = 10 et x = 1, ligne d'impression 1,11,21,31,41 ...... ligne de fin du fichier d'origine dans le nouveau fichier.

Par exemple, n = 20 et x = 5, ligne d'impression 5,25,45,65 ...... ligne de fin du fichier d'origine dans le nouveau fichier.

1
Nicolaj Hansen