wc -l na migração de SunOs para Linux

1

Estamos migrando do SunOS para o Linux. Estou enfrentando algum problema com o comando wc -l . Quando eu usei wc -l <file_name> , o SunOS está dando espaços de liderança antes de contar onde, como o Linux, não há espaços à esquerda. Isso está causando falhas nos scripts de validação de contagem de linhas dos meus trabalhos. Eu tentei criar uma função como essa para acrescentar alguns espaços iniciais no Linux

wc () {    /usr/bin/wc "$@" | sed 's/^/       /';  }

mas não funciona para todos os valores de contagem de linhas. Por favor, me avise como resolver esse problema, em vez de mudar 200 + scripts de todos os meus trabalhos.

    
por bullshot 12.04.2016 / 12:40

2 respostas

2

Na verdade, o comportamento que eu vejo para o Linux (e o OSX) corresponde ao SunOS razoavelmente bem, com algumas diferenças para o número de dígitos.

A HPUX segue a descrição em POSIX , que não mostra espaços em branco à esquerda no formato:

"%d %d %d %s\n", <newlines>, <words>, <bytes>, <file>

Você pode imitar o formato do SunOS usando o awk

#!/bin/sh
wc () {
    /usr/bin/wc "$@" | \
    awk '{
        for (n = 0; n < NF-1; ++n) {
            printf("%8d ", $n);
        }
        printf "%s\n", $NF; }'
}

wc "$@"

Eu intencionalmente deixei um espaço em branco entre as colunas para evitar o problema observado na lógica POSIX.

    
por 12.04.2016 / 13:03
0

A saída do SunOS wc corresponde às definições de SYSVr4.

Não vejo qualquer divergência real no padrão POSIX. Até mesmo o build-in wc de ksh93 corresponde à SunOS output e um recente Solaris 11 até usa a implementação da biblioteca wc de ksh93 sem nenhuma alteração na saída.

Se seus scripts tiverem problemas com a saída de uma ou outra implementação de wc , essa é uma boa dica para um script não portátil que deve ser corrigido.

    
por 14.04.2016 / 14:49