como exibir as primeiras vinte linhas para todos os arquivos dentro de um arquivo

0

Eu uso isso para colocar todos os nomes dos arquivos ".txt" em um arquivo:

find . -name "*.txt" | sort > txtfile

Como exibir todas as primeiras 20 linhas (se menos de 20, fornecidas com linhas em branco) para todos os arquivos listados em txtfile?

    
por YIHANG WANG 20.09.2016 / 06:27

2 respostas

1

Como os nomes dos arquivos são separados por nova linha no arquivo txtfile , você pode ler cada arquivo, verificar se o número de linhas é igual a (ou maior que 20), se imprimir as 20 primeiras linhas, senão imprimir novas linhas as linhas restantes:

while IFS= read -r f; do 
    lines=$(wc -l <"$f")
    if (( lines < 20 )); then
        cat -- "$f" 
        for ((i=20; i>lines; i--)); do 
            echo
        done
    else 
        head -20 -- "$f"
    fi
done <txtfile
    
por 20.09.2016 / 07:02
0

Se você tem um awk que suporta a regra ENDFILE , você pode fazer

xargs -a txtfile awk 'FNR <= 20 {print} ENDFILE {for (n=FNR+1;n<=20;n++) print ""}'

Se você não se importa em ter um cabeçalho para cada arquivo, você pode usar pr para imprimir a primeira 'página' de 20 linhas de cada arquivo

xargs -a txtfile pr +1:1 -l25

(Infelizmente, embora pr tenha uma opção para suprimir o cabeçalho, essa opção também suprime a paginação). Se você fizer atenção aos cabeçalhos, poderá processar os arquivos individualmente e removê-los usando tail , por exemplo,

while read -r f; do 
  pr +1:1 -l25 "$f" | tail -n +6
done < txtfile

ou (com o endereçamento do GNU sed 'n skip m')

xargs -a txtfile pr +1:1 -l25 | sed '1~25,+4d'
    
por 20.09.2016 / 09:54