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;}
}
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
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
Part de gâteau: cat test.txt | awk 'NR % 10 == 1'
Ce n'est pas (g) awk, mais ça marchera:
cat myfile | grep ^[[:digit:]]*0[[:blank:]]
devrait faire l'affaire.
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.