printing - column - awk unix
Imprime cada lĂnea n en una fila usando gawk (5)
Tengo un archivo muy grande en el que necesito obtener cada línea n e imprimirlo en una fila.
Mis datos:
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
Quiero que mis datos se vean así:
1 937 4.320194
3 934 1.783326
5 939 2.309559
7 611 -1.41808
9 606 2.159683
Este es, por supuesto, un ejemplo. Quiero cada décima línea para mi enorme archivo de datos. Intenté esto hasta ahora:
NF == 6 {
if(NR%10) {print;}
}
Con sed
, puede hacer muchas variaciones sobre esto con bastante facilidad con el comando de first~step
. Por ejemplo:
# 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
Haciéndolo directamente en el símbolo del sistema (Windows).
Coloque el archivo gawk.exe en la carpeta donde se encuentra el archivo e inicie una solicitud de comando en la carpeta, y escriba
gawk "NR%n==x" oldfile.txt>newfile.txt
n es cada una de las líneas que desea imprimir y x es la línea de inicio.
Por ejemplo, n = 10 y x = 1, línea de impresión 1,11,21,31,41 ...... línea final desde el archivo original al nuevo archivo.
Por ejemplo, n = 20 y x = 5, línea de impresión 5,25,45,65 ...... línea final desde el archivo original al nuevo archivo.
No es (g) awk, pero funcionará:
cat myfile | grep ^[[:digit:]]*0[[:blank:]]
cat myfile | grep ^[[:digit:]]*0[[:blank:]]
debería hacer el truco.
Para imprimir cada segunda línea, comenzando con la primera:
awk ''NR%2==1'' file.txt
Para imprimir cada décima línea, comenzando con la décima línea:
awk ''NR%10==0'' file.txt
Para usar esto en un script, agregue lo siguiente a un archivo llamado script.awk
:
BEGIN {
print "Processing file"
}
NR%10==0
END {
print "Finished processing"
}
Luego ejecuta:
awk -f script.awk file.txt
Pedazo de pastel: cat test.txt | awk ''NR % 10 == 1''
cat test.txt | awk ''NR % 10 == 1''