trova la lunghezza della linea più lunga in tutti i file di testo in una directory


16

So come ottenere la lunghezza della linea più lunga in un file di testo con awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt

ma come posso ottenere la lunghezza della linea più lunga di tutti i file in una directory?

Risposte:


11

La soluzione più semplice è concatenare tutti i file e reindirizzare il risultato allo script:

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'

Puoi anche passare direttamente diversi file a awk:

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*

Naturalmente, possono esserci alcuni avvisi se i file sono in realtà directory ma dovrebbero essere innocui. Potresti avere problemi più grandi con i file binari perché non hanno un concetto di linea . Quindi, per essere più specifici, puoi fare qualcosa di simile

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt

per abbinare solo il .txt file nella directory corrente.

E, come affermato da @ G-Man nel suo commento, *non corrisponderà ai file nascosti (iniziando con un punto). Se vuoi quelli, usa * .*.


O, forse, cat * .* | .... Oppure elimina l' uso inutile del gatto e dillo awk '...' * .*.
G-Man dice "Ripristina Monica" il

@ G-Man In effetti. Stavo modificando la mia risposta a riguardo quando hai commentato. :-) Ho detto molto semplice perché concatenare i file con cat è quello che all'inizio sembrava più semplice.
lgeorget,

4

Con GNU wc:

cat *.txt|wc -L

-L stampa la lunghezza della linea più lunga.


4

Se vuoi la lunghezza massima per file, con GNU awk:

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +

O l'unica lunghezza massima in tutti i file:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'

Ciò presuppone che i file finiscano con caratteri di nuova riga. Se un file non termina con un carattere di nuova riga, la sua ultima riga non delimitata verrà unita alla prima riga del file successivo e probabilmente annullerà il risultato.

-size +1c è un'ottimizzazione poiché i file di testo che sono vuoti o che contengono solo un carattere hanno rispettivamente 0 righe e 1 riga vuota, quindi non avranno la riga più lunga.


Sono file di testo, quindi terminano con caratteri di nuova riga (a meno che non siano vuoti).
Gilles 'SO- smetti di essere malvagio' il

0

Anche con GNU wc (coreutils 8.4), può gestire più file

wc -L *.txt
  • elenca la lunghezza di ogni singolo file
  • oltre a fornire la lunghezza più lunga di tutti i file

Questo è essenzialmente ciò che quest'altra risposta menzione wc -Lfa, ma la soluzione ha lo svantaggio che si deve guadare attraverso il max-lunghezza di tutti gli altri file prima. C'è qualche vantaggio in questo?
Anthon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.