Solaris: Como executar um comando do sistema em cima do awk e combinar todas as saídas em uma única linha

0

Tenha este requisito peculiar para imprimir arquivos em um determinado diretório no formato mencionado abaixo

filename1 <type of file> owner group e filename2 <type of file> owner group e $

O separador entre colunas é uma guia.

Eu consegui escrever o seguinte comando, mas a saída do comando system introduz uma nova linha que desejo evitar

find . -type f | xargs -I{} ls -let {} | awk -F" " 'BEGIN{OFS="\t" ORS=":"} {cmd=sprintf("file \"%s\"", $10);system(cmd);print $3,$4}'| tr -s ':\t ' '\t'

A saída é produzida da seguinte forma: filename1 <type of file> e owner group filename2 <type of file> e owner group $

Eu entendo que o comando system é reposnsível para a nova linha que desejo evitar - usei o ORS pela mesma razão, mas sem sorte.
Qualquer ajuda seria muito apreciada.

    
por Prasoon 06.05.2015 / 10:31

1 resposta

2

Você pode usar a E / S canalizada de um comando em awk (pelo menos gawk , eu não testei isso no Solaris):

find . -type f | xargs ls -l | awk 'BEGIN { OFS="\t" } { command=sprintf("file \"%s\"", $9); command | getline type; close(command); print type, $3, $4 }' | tr ":" "\t"

Se o seu find oferecer suporte, você poderá simplificar isso com

find . -type f -ls | awk ...

Há um recurso útil sobre o uso de getline , que abrange várias advertências (incluindo a não utilização de close() como eu tinha inicialmente).

    
por 06.05.2015 / 10:48

Tags