Enumere todos los archivos .txt y cuente el número de columnas

Enumere todos los archivos .txt y cuente el número de columnas

¿Cómo enumerar todos los archivos .txt (archivo delimitado por barras verticales) y el número de columnas de cada archivo en un directorio?

Respuesta1

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  FNR == 1 {print FILENAME ": " NF; nextfile}' {} +

Imprimiría algo como

./dir/foo.txt: 2

para cada archivo normal no vacío cuyo nombre termine en .txtdonde "2"está el número de |campos separados en la primera línea del archivo.

Tenga en cuenta que nextfileno está disponible en todas awklas implementaciones, pero en aquellas donde no lo está, debería ser inofensivo (solo menos eficiente, ya que awk leería los archivos por completo).

Si desea considerar solo los archivos que tienen el mismo número de columnas en todas sus líneas no vacías, con GNU awk:

find . -name '*.txt' -type f -size +0 -exec awk -F '|' '
  BEGINFILE {n = 0}
  NF {
    if (n && NF != n) {
      print "skipping "FILENAME" ("NF" != "n")" > "/dev/stderr"
      n = 0; nextfile
    }
    n = NF
  }
  ENDFILE {if (n) print FILENAME ": " n}' {} +

Respuesta2

Otro enfoque para cualquierawkimplementación:

find . -type f -name "*.txt" -exec awk -F'|' 'NF{ print FILENAME,NF; exit }' {} \;

  • -F'|'- tratar |como separador de campo
  • NF{ ... }- garantiza que haya al menos un campo/columna en el archivo. NFapunta al número de columnas

Respuesta3

find . -name "*.txt" -type f -exec wc -l {} \;

Respuesta4

Su pregunta no es muy clara, pero puede probar este comando: find DIRECTORY -name "*.txt" | xargs awk -F "SEPARATOR" "{print FILENAME, NF }" simplemente reemplace DIRECTORYy SEPARATORcon su directorio y separador de columnas.

información relacionada