wc<\/code> es pasar el nombre de un archivo de texto en la l\u00ednea de comando.<\/p>\nwc lorem.txt<\/pre>\n<\/p>\n
Esto causa wc<\/code> para escanear el archivo y contar las l\u00edneas, palabras y bytes, y escribirlos en la ventana del terminal.<\/p>\nLas palabras se consideran cualquier cosa limitada por espacios en blanco. Si son palabras de un idioma real o no, es irrelevante. Si un archivo no contiene nada m\u00e1s que \u00abfrd g lkj\u00bb, todav\u00eda cuenta como tres palabras.<\/p>\n
Las l\u00edneas son secuencias de caracteres que terminan en un retorno de carro o al final del archivo. No importa si la l\u00ednea se ajusta en su editor o en la ventana de la terminal, hasta que wc<\/code> encuentra un retorno de carro o el final del archivo, sigue siendo la misma l\u00ednea.<\/p>\nNuestro primer ejemplo encontr\u00f3 una l\u00ednea en todo el archivo. Aqu\u00ed est\u00e1 el contenido del archivo \u201clorem.txt\u201d.<\/p>\n
cat lorem.txt<\/pre>\n<\/p>\n
Todo eso cuenta como una sola l\u00ednea porque no hay retornos de carro. Compare esto con otro archivo, \u00ablorem2.txt\u00bb, y c\u00f3mo wc<\/code> lo interpreta.<\/p>\nwc lorem2.txt<\/pre>\ncat lorem2.txt<\/pre>\n<\/p>\n
Esta vez, wc<\/code> cuenta 15 l\u00edneas porque se han insertado retornos de carro en el texto para comenzar una nueva l\u00ednea en puntos espec\u00edficos. Sin embargo, si cuenta las l\u00edneas con texto, ver\u00e1 que solo hay 12.<\/p>\nLas otras tres l\u00edneas son l\u00edneas en blanco al final del archivo. Estos contienen s\u00f3lo retornos de carro. Aunque no hay texto en estas l\u00edneas, se ha iniciado una nueva l\u00ednea y as\u00ed wc<\/code> los cuenta como tales.<\/p>\nPodemos pasar tantos archivos a wc<\/code> como nos gusta<\/p>\nwc lorem.txt lorem2.txt<\/pre>\n<\/p>\n
Obtenemos las estad\u00edsticas para cada archivo individual y un total para todos los archivos.<\/p>\n
Tambi\u00e9n podemos usar comodines para poder seleccionar archivos coincidentes en lugar de archivos con nombres expl\u00edcitos.<\/p>\n
wc *.txt *.?<\/pre>\n<\/p>\n
Las opciones de la l\u00ednea de comandos<\/h2>\n
Por defecto, wc<\/code> mostrar\u00e1 las l\u00edneas, palabras y bytes en cada archivo. Es lo mismo que usar el -l<\/code> (l\u00edneas) -w<\/code> (palabras) y -c<\/code> (bytes) opciones.<\/p>\nwc lorem.txt<\/pre>\nwc -l -w -c lorem.txt<\/pre>\n<\/p>\n
Podemos especificar qu\u00e9 combinaci\u00f3n de figuras queremos ver.<\/p>\n
wc -l lorem.txt
\n
\nwc -w lorem.txt
\n
\nwc -c lorem.txt
\n
\nwc -l -c lorem.txt<\/pre>\n<\/p>\n
Debe prestarse especial atenci\u00f3n a la \u00faltima cifra, generada por el -c<\/code> (bytes) opci\u00f3n. Muchas personas confunden esto con contar los caracteres. en realidad cuenta bytes<\/em>. El n\u00famero de caracteres y el n\u00famero de bytes bien podr\u00edan ser los mismos. Pero no siempre.<\/p>\nVeamos el contenido de un archivo llamado \u00abunicode.txt\u00bb.<\/p>\n
cat unicode.txt<\/pre>\n<\/p>\n
Tiene tres palabras y un car\u00e1cter del alfabeto no latino. vamos a dejar wc<\/code> procesar el archivo con su configuraci\u00f3n predeterminada de bytes<\/em>y lo haremos de nuevo, pero solicite caracteres<\/em> con el -m<\/code> (caracteres) opci\u00f3n.<\/p>\nwc unicode.txt<\/pre>\nwc -l -w -m unicode.txt<\/pre>\n<\/p>\n
Hay m\u00e1s bytes que caracteres.<\/p>\n
Echemos un vistazo al volcado hexadecimal del archivo y veamos qu\u00e9 est\u00e1 pasando. los hexdump<\/code> de comando -C<\/code> La opci\u00f3n (can\u00f3nica) muestra los bytes del archivo en l\u00edneas de 16, con su equivalente ASCII simple (si lo hay) al final de la l\u00ednea. Si no hay un car\u00e1cter ASCII correspondiente, un punto \u201c.<\/code>\u201d se muestra en su lugar.<\/p>\nhexdump -C unicode.txt<\/pre>\n<\/p>\n
En ASCII, un valor hexadecimal de 0x20<\/code> representa un car\u00e1cter de espacio. Si contamos tres valores desde la izquierda, vemos que el siguiente valor es un car\u00e1cter de espacio. As\u00ed que los primeros tres valores 0x62<\/code>, 0x6f<\/code>y 0x79<\/code> representar las letras en \u201cni\u00f1o\u201d.<\/p>\nsaltando sobre el 0x20<\/code>vemos otro conjunto de tres valores hexadecimales: 0x63<\/code>, 0x61<\/code>y 0x74<\/code>. Estos deletrean \u00abgato\u00bb. Saltando sobre el siguiente car\u00e1cter de espacio, vemos tres valores m\u00e1s para las letras en \u00abperro\u00bb. Estos son 0x64<\/code>, 0x5f<\/code>y 0x67<\/code>.<\/p>\nJusto detr\u00e1s de la palabra \u00abperro\u00bb podemos ver un car\u00e1cter de espacio 0x20<\/code>y cinco valores hexadecimales m\u00e1s. Los dos \u00faltimos son retornos de carro, 0x0a<\/code>.<\/p>\nLos otros tres bytes representan el car\u00e1cter no latino, que hemos marcado en verde. Es un car\u00e1cter Unicode y se necesitan tres bytes para codificarlo. Estos son 0xe1<\/code>, 0xaf<\/code>y 0x8a<\/code>.<\/p>\nAs\u00ed que aseg\u00farese de saber lo que est\u00e1 contando y de que los bytes y los caracteres no tienen por qu\u00e9 ser iguales. Por lo general, contar bytes es m\u00e1s \u00fatil porque te dice lo que realmente est\u00e1 en el interior<\/em> el archivo. Contar por caracteres te da el n\u00famero de cosas representado<\/em> por el contenido del archivo.<\/p>\nRELACIONADO:<\/strong> \u00bfQu\u00e9 son las codificaciones de caracteres como ANSI y Unicode, y en qu\u00e9 se diferencian?<\/em><\/strong><\/p>\nTomar nombres de archivo de un archivo<\/h2>\n
Hay otra forma de proporcionar nombres de archivo a wc<\/code> . Puede poner los nombres de archivo en un archivo y pasar el nombre de que<\/em> archivo a wc<\/code>. Abre el archivo, extrae los nombres de archivo y los procesa como si se hubieran pasado en la l\u00ednea de comandos. Esto le permite almacenar una colecci\u00f3n arbitraria de nombres de archivo para su reutilizaci\u00f3n.<\/p>\nPero hay un problema, y \u200b\u200bes uno grande. Los nombres de los archivos deben ser nulo<\/em> rescindido, no retorno de carro<\/em> terminado. Es decir, despu\u00e9s de cada nombre de archivo debe haber un byte nulo de 0x00<\/code> en lugar del byte de retorno de carro habitual 0x0a<\/code>.<\/p>\nNo puede abrir un editor y crear un archivo con este formato. Por lo general, los archivos como este son generados por otros programas. Pero, si tiene un archivo de este tipo, as\u00ed es como lo usar\u00eda.<\/p>\n
Aqu\u00ed est\u00e1 nuestro archivo que contiene los nombres de archivo. abri\u00e9ndolo en less<\/code> te muestra lo extra\u00f1o\u201d^@<\/code>\u201d personajes que less<\/code> utiliza para indicar bytes nulos.<\/p>\nless source-files-list.txt<\/pre>\n<\/p>\n
Para usar el archivo con wc<\/code>tenemos que usar --files0-from<\/code> (leer entrada de) opci\u00f3n y pasar el nombre del archivo que contiene los nombres de archivo.<\/p>\nwc ---files0-from=source-files-list.txt<\/pre>\n<\/p>\n
Los archivos se procesan exactamente como si se hubieran proporcionado en la l\u00ednea de comandos.<\/p>\n
Una forma mucho m\u00e1s com\u00fan, flexible y productiva de enviar informaci\u00f3n a wc<\/code> es canalizar la salida de otros comandos a wc<\/code> . Esto lo podemos demostrar con el echo<\/code> dominio.<\/p>\necho \"Count this for me\" | wc<\/pre>\necho -e \"Count thisnfor me\" | wc<\/pre>\n<\/p>\n
El segundo echo<\/code> El comando utiliza el -e<\/code> (caracteres escapados) para permitir secuencias escapadas como \u00abn<\/code>\u201d c\u00f3digo de formato de nueva l\u00ednea. Esto inyecta una nueva l\u00ednea, causando wc<\/code> para ver la entrada como dos l\u00edneas.<\/p>\nAqu\u00ed hay una cascada de comandos que alimentan su entrada de uno a otro.<\/p>\n
find .\/* -type f | rev | cut -d'.' -f1 | rev | sort | uniq<\/pre>\n
\n- encontrar<\/strong> busca archivos (
type -f<\/code>) recursivamente, comenzando en el directorio actual. rev<\/code> invierte los nombres de archivo.<\/li>\n- Corte<\/strong> extrae el primer campo (
-f1<\/code>) definiendo el delimitador de campo como un punto \u00ab.<\/code>\u201d y leyendo desde el \u201cfrente\u201d del nombre de archivo invertido hasta el primer punto que encuentra. Ahora hemos extra\u00eddo la extensi\u00f3n del archivo.<\/li>\n- Rvdo<\/strong> invierte el primer campo extra\u00eddo.<\/li>\n
- clasificar<\/strong> los ordena en orden alfab\u00e9tico ascendente.<\/li>\n
- \u00fanico<\/strong> enumera las entradas \u00fanicas a la ventana del terminal.<\/li>\n<\/ul>\n
<\/p>\n
Este comando enumera todas las extensiones de archivo \u00fanicas en el directorio actual y cualquier subdirectorio.<\/p>\n
Si a\u00f1adimos el -c<\/code> (contar) opci\u00f3n a la uniq<\/code> comando contar\u00eda el ocurrencias<\/em> de cada tipo de extensi\u00f3n. Pero si queremos saber cu\u00e1ntas extensiones de archivo diferentes y \u00fanicas hay, podemos descartar wc<\/code> como el \u00faltimo comando en la l\u00ednea, y use el -l<\/code> (l\u00edneas) opci\u00f3n.<\/p>\nfind .\/* -type f | rev | cut -d'.' -f1 | rev | sort | uniq | wc -l<\/pre>\n<\/p>\n
RELACIONADO:<\/strong> C\u00f3mo usar el comando de corte de Linux<\/em><\/strong><\/p>\nY finalmente<\/h2>\n
Aqu\u00ed hay un \u00faltimo truco wc<\/code> puede hacer por ti. Le dir\u00e1 la longitud de la l\u00ednea m\u00e1s larga en un archivo. Lamentablemente, no te dice qu\u00e9 l\u00ednea es. Solo te da la longitud.<\/p>\nwc -L taf.c<\/pre>\n<\/p>\n
Sin embargo, tenga cuidado, las pesta\u00f1as se cuentan como ocho espacios. Visto en mi editor, hay tres pesta\u00f1as de dos espacios al comienzo de esa l\u00ednea. Su longitud real es de 124 caracteres. Por lo que la cifra reportada se ampl\u00eda artificialmente.<\/p>\n
Tratar\u00eda esta funci\u00f3n con una gran pizca de sal. Y con eso quiero decir que no lo uses. Su salida es enga\u00f1osa.<\/p>\n
A pesar de sus peculiaridades, wc<\/code> es una gran herramienta para ingresar comandos canalizados cuando necesita contar todo tipo de valores, no solo las palabras en un archivo.<\/p>\nRELACIONADO:<\/strong> 37 comandos importantes de Linux que debe conocer<\/em><\/strong><\/p>\n<\/div>\n