Eu tenho um output.txt da execução de um script de shell da seguinte maneira:
abc.txt
errorstatus1
Fri Nov 11 02:00:09 2016
def.txt
errorstatus2.txt
Sat Nov 12 03:00:09 2016
O arquivo de texto possui várias entradas linha por linha da mesma maneira. Desejo imprimir esses valores em colunas: Nome do arquivo, Status e Timestamp da seguinte maneira:
Filename Status Timestamp
abc.txt errorstatus1 Fri Nov 11 02:00:09 2016
def.txt errorstatus2 Sat Nov 12 03:00:09 2016
command-line
bash
scripts
text-processing
linux09
fonte
fonte
abc.txt,errorstatus1,Fri Nov 11 02:00:09 2016
. Editei sua pergunta para corresponder ao que ela diz com o exemplo que você forneceu. Sinta-se livre para reverter, mas por favor note que você realmente precisa para esclarecer o que exatamente você quer - valores colunados ou valores separados por vírgulasRespostas:
Com
paste
:isso produzirá o conteúdo do arquivo separado por nova linha como colunas e três colunas separadas por tabulação por linha.
Adicionando o cabeçalho:
Para colocar a saída em coluna, obtenha ajuda de
column
:Exemplo:
fonte
echo Filename,Status,Timestamp; paste -d ',' - - - <file.txt
Você pode usar o awk:
A saída pode não ser tão bonita:
Em
%s\t
vez disso, você pode usar para saída separada por tabulação.NR % 3
é zero (e falso) para cada terceira linha; portanto, as outras linhas são impressas com um espaço após elas, em vez de uma nova linha.next
apenas inicia a próxima iteração.1
, com uma nova linha após ela, pois ela não corresponde ao primeiro bloco.fonte
Há também
rs
( utilitário BSD r e s hape):Em particular,
então
ou (para adicionar o cabeçalho)
fonte
Para completar, você também pode fazer isso
sed
:1iFilename\tStatus\tTimestamp
insere a linha do cabeçalho antes da linha 1N;N
lê mais duas linhas no buffer de padrão, fornecendo um total de 3 linhas separadas por nova linhay/\n/\t/
substitui todas as novas linhas por guias no buffer de padrãoOs comandos
i
,N
ey
sed estão documentados aqui .fonte
Sempre é possível criar algo para o processamento de texto com AWK ou Perl e, claro, Python, que é essa resposta.
Como uma linha:
Como script de várias linhas
A idéia básica aqui é fornecer a entrada do script via stdin (usando o redirecionamento do shell
<
, embora um pipe também possa ser usado). O script usa guias para separar os campos, embora os espaços também possam ser usados para uma saída mais "ajustada".Exemplo de saída usando o exemplo de entrada fornecido pelo OP:
fonte