cat um arquivo de diretórios que atenda o nome do arquivo à linha de texto e remova a linha do cabeçalho? [fechadas]

1

Como posso catar arquivos de diretórios, anexando o nome do arquivo à linha de texto e removendo a linha do cabeçalho? De modo a ter apenas 1 linha de cabeçalho no arquivo all.txt.

    
por Bryant 04.09.2014 / 17:53

3 respostas

1

I have 225 files of text, each with 2 lines of text a header row and the numerical data. The file name that each set of text is from is what I want to add in a first column on the row with the data. I also want to remove/(not copy) the header row from all but the very first. Thus giving me only one header row at the very top.

Se eu entendi corretamente, você quer o seguinte:

for file in *.txt; do echo "$file" $(tail -n1 $file) >> output.txt; done

Em seguida, edite o arquivo output.txt para criar o cabeçalho como quiser.

    
por 04.09.2014 / 19:36
1
$ cat a.txt
HEADER
a
b
c
$ cat b.txt
HEADER
1
2
3
$ awk 'NR==1 {print; next} FNR==1 {next} {print FILENAME, $0}' *.txt > all.txt
$ cat all.txt
HEADER
a.txt a
a.txt b
a.txt c
b.txt 1
b.txt 2
b.txt 3
    
por 04.09.2014 / 19:52
1

Usando o awk, use as variáveis NR e FNR para ignorar todas as linhas de cabeçalho, exceto as do primeiro arquivo. Você pode preceder o nome do arquivo atual para as linhas restantes acessando a variável FILENAME incorporada. Por exemplo, se houver duas linhas de cabeçalho em cada arquivo, então

awk 'NR<3; FNR>2 {print FILENAME,$0}' *.txt > all.txt
    
por 04.09.2014 / 19:53