tag mp3tag kid3 editar easytag linux bash shell unix scripting

mp3tag - mp3 tag linux



unix-recuento de columnas en archivo (10)

Dado un archivo con datos como este (es decir, el archivo stores.dat)

sid|storeNo|latitude|longitude 2|1|-28.03720000|153.42921670 9|2|-33.85090000|151.03274200

¿Cuál sería un comando para generar el número de nombres de columnas?

es decir, en el ejemplo anterior sería 4. (número de caracteres de tubería + 1 en la primera línea)

Estaba pensando algo así como:

awk ''{ FS = "|" } ; { print NF}'' stores.dat

pero devuelve todas las líneas en lugar de solo la primera y para la primera línea devuelve 1 en lugar de 4


A menos que esté usando espacios allí, debería poder usar | wc -w | wc -w en la primera línea.

wc es "Word Count", que simplemente cuenta las palabras en el archivo de entrada. Si envía solo una línea, le indicará la cantidad de columnas.


Basado en la respuesta de Cat Kerr. Este comando está trabajando en Solaris

awk ''{print NF; exit}'' stores.dat


Esta es una solución alternativa (para mí: no uso awk muy a menudo):

Muestre la primera fila del archivo que contiene los datos, reemplace todas las tuberías con nuevas líneas y luego cuente las líneas:

$ head -1 stores.dat | tr ''|'' ''/n'' | wc -l


Esto es usualmente lo que uso para contar la cantidad de campos:

head -n 1 file.name | awk -F''|'' ''{print NF; exit}''


Si tiene Python instalado, puede intentar:

python -c ''import sys;f=open(sys.argv[1]);print len(f.readline().split("|"))'' / stores.dat


Solución Perl similar a la solución awk de Mat:

perl -F''/|'' -lane ''print $#F+1; exit'' stores.dat

Lo he probado en un archivo con 1000000 columnas.

Si el separador de campo es un espacio en blanco (uno o más espacios o pestañas) en lugar de una tubería:

perl -lane ''print $#F+1; exit'' stores.dat


Tu podrías intentar

gato ARCHIVO | awk ''{print NF}''


puedes intentar:

head -1 stores.dat | grep -o /| | wc -l


seleccione cualquier fila en el archivo (en el ejemplo a continuación, es la segunda fila) y cuente el número de columnas, donde el delimitador es un espacio:

sed -n 2p text_file.dat | tr '' '' ''/n'' | wc -l


awk -F''|'' ''{print NF; exit}'' stores.dat

Simplemente salga justo después de la primera línea.