Sed da linha 6 de todos os arquivos txt e podendo gerar todos os resultados em um único arquivo

1

Eu preciso sed de todos os arquivos * .txt da linha 6 até o final Todos os resultados devem estar em um novo arquivo único com o nome de cada arquivo que precede os resultados

Exemplo: Tendo diferentes arquivos txt o resultado deve ser um único que se parece com isso, da terceira linha até o final

file 1
3
4
5
file 2
3
4
5
file 3
3
4
5
    
por Chris 14.03.2016 / 14:04

2 respostas

2

Com o GNU sed :

sed -s '1F;6,$!d' -- *.txt > output

Portável, você pode usar awk :

awk 'FNR == 1 {print FILENAME}; FNR>=6' ./*.txt > output

(note que, em ambos os casos, arquivos ocultos são excluídos).

Arquivos vazios não serão referenciados, mas arquivos com menos de 6 linhas serão. Se você não quer ouvir sobre isso, você pode fazer:

sed -s '6F;6,$!d' -- *.txt > output
awk 'FNR == 6 {print FILENAME}; FNR>=6' ./*.txt > output

Ou se você quiser ver todos os arquivos:

for f in *.txt; do
  printf '%s\n' "$f"
  tail -n +6 < "$f"
done > output

Com o GNU tail , você também faz:

$ tail -vn +6 -- *.txt
==> a.txt <==
6
7
8
9
10

==> b.txt <==
6
7
8
9
10
    
por 14.03.2016 / 14:16
-2

Minha sugestão:

ls *.txt | xargs -I {} bash -c "echo {}; sed -n '6,$ p' {}"

Exemplo:

$ seq 10 > 2.txt              
$ seq 12 > 1.txt
$ ls *.txt | xargs -I {} bash -c "echo {}; sed -n '6,$ p' {}"
1.txt
6
7
8
9
10
11
12
2.txt
6
7
8
9
10
    
por 14.03.2016 / 14:13

Tags