Eu tenho uma lista de files.txt, abaixo:
-rw-rw-r-- 1 root dev 11 May 16 12:18 20_SumActive.txt
-rw-rw-r-- 1 root dev 11 May 16 12:18 22_SumActive.txt
-rw-rw-r-- 1 root dev 7 May 16 12:18 24_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 26_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 28_SumActive.txt
Resultado:
kpgmeddev01> cat 2[0-8]_SumActive.txt
Sum: 47760
Sum: 72000
Sum: 0
Como obter saída como abaixo:
Sum: 47760
Sum: 72000
Sum: 0
[Blank]
[Blank]
Precisa de orientação.
command-line
solaris
Pouco
fonte
fonte
[Blank]
, você quis dizer aqueles 7 caracteres ou pretendia indicar uma linha vazia?Respostas:
cat
não pode gerar dados que não existem nos arquivos. Se um arquivo estiver vazio, ele nem terá um caractere de nova linha para fornecer uma linha vazia como saída.Você pode garantir que os arquivos contenham pelo menos um único caractere de nova linha.
É assim que você usa o GNU
awk
para garantir que (isso modifique os arquivos vazios):O
ENDFILE
bloco será executado depois de terminar de ler qualquer um dos arquivos. SeFNR
for zero, nunca vimos nenhuma linha no arquivo, então inserimos uma única nova linha nele. O script continua com o próximo arquivo.Você pode usar
cat
como fez na pergunta.Como alternativa, sem alterar os arquivos, use o GNU em
awk
vez decat
:Isso faz o mesmo tipo de detecção de arquivos vazios como acima, mas imprime a nova linha na saída padrão e não no arquivo. O
1
final pode ser substituído por{ print }
e fará com que todos os dados nos arquivos não vazios sejam gerados.Como alternativa, um loop de shell (deve funcionar em qualquer shell POSIX):
O
-s
teste será verdadeiro se o arquivo existir e tiver um tamanho maior que zero.Se você deseja que a string literal
[Blank]
seja gerada para arquivos vazios, basta inserir essa string na frente\n
nas chamadasprintf
acima (isso também funcionará noawk
código).fonte
Com
perl
O que adiciona um caractere de nova linha se estiver ausente no final, geraria uma linha vazia para arquivos vazios, mas também acrescentaria uma nova linha para arquivos não vazios que não possuem (e acabariam sendo concatenados em uma única linha com
cat
).fonte
(Não é exatamente isso que você pergunta, mas :) Nesse tipo de situação, prefiro usar
head
Normalmente é isso que você deseja. Se não, é fácil
sed
depoisfonte
Com
xargs
egrep
você pode tentar algo como:fonte
Supondo que
[Blank]
você quer dizer linhas em branco literais, isso deve funcionar:fonte
Você pode testar cada arquivo para verificar se o comprimento é zero antes de tentar exibir seu conteúdo:
Eu usei, em
awk 1 "$f"
vez de,cat "$f"
porqueawk
garante terminar a saída de um arquivo com uma nova linha.Na sua pergunta, se você pretendeu que isso
[blank]
não devesse ser literal, mas apenas uma linha em branco, você pode implementá-lo usando o código acima e removendo'[Blank]'
do final daecho
instrução.fonte
Estou assumindo que seus arquivos 26_SumActive.txt e 28_SumActive.txt estão vazios e você precisa de linhas em branco ao exibir seu conteúdo
Para isso, você pode simplesmente percorrer sua lista de arquivos e classificar seu conteúdo. Se o arquivo estiver vazio, faça eco da linha em branco.
[ -s FILE ]
Verdadeiro se FILE existir e tiver um tamanho maior que zero.fonte
if [ -s $i ]; then cat $i; else echo -e ""; fi;
. Ainda +1 para um teste simples usando apenas a funcionalidade padrão do shell.cat "$i"; test -s "$i" || echo
- não há necessidade de sinalizadores pesadosif
ou não portáteisecho
.where - permitirá que o gato leia da entrada padrão.
Então, depois de exibir o conteúdo de seus arquivos, o gato aguardará sua entrada. Você pode fazer a entrada desejada pressionando Enter para espaços em branco literais ou [Blank] se for o que deseja. Após cada entrada pressionada, digite, depois que todas as entradas forem feitas, pressione ^ D (Ctrl + D) e pronto.
PS: Para cada entrada, você obterá a saída respectiva.
Com isso, você poderá colocar espaços em branco ou qualquer outra coisa que desejar, entre duas sequências de saídas.
fonte
cat
uma solução e permitir que o OP atinja o que eles desejam.