SunO에서 Linux로 마이그레이션 시 wc -l 명령 관련 문제

SunO에서 Linux로 마이그레이션 시 wc -l 명령 관련 문제

우리는 SunOS에서 Linux로 마이그레이션하고 있습니다. wc -l명령에 몇 가지 문제가 있습니다 . 를 사용할 때 wc -l <file_name>SunOS는 계산 앞에 공백을 제공하지만 Linux는 그렇지 않습니다. 이로 인해 내 작업의 행 개수 유효성 검사 스크립트가 실패했습니다. Linux에서 선행 공백을 추가하기 위해 이와 같은 함수를 만들어 보았습니다.

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

그러나 모든 행 개수 값에 대해서는 작동하지 않습니다. 제가 작업하는 200개 이상의 스크립트를 변경하지 않고 이 문제를 해결하는 방법.

답변1

실제로 내가 본 Linux(및 OSX) 동작은 비트에 약간의 차이가 있지만 SunOS와 상당히 잘 일치합니다.

HPUX는 다음의 설명을 따릅니다.POSIX, 선행 공백 없이 형식을 표시합니다.

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

awk를 사용하여 SunOS 형식을 에뮬레이트할 수 있습니다

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

wc "$@"

POSIX 이론적 근거에서 언급된 문제를 피하기 위해 의도적으로 열 사이에 공백을 남겨 두었습니다.

답변2

SunOS wc출력은 SYSVr4의 정의와 일치합니다.

POSIX 표준과 실제 차이점은 없습니다. wcksh93의 내장 기능 도 SunOS출력과 일치하며 최근 Solaris 11에서는 출력 변경 없이 ksh93의 wc라이브러리 구현 도 사용합니다.ksh93

스크립트가 하나 또는 다른 구현의 출력에 문제가 있는 경우 wc이식할 수 없는 스크립트를 수정하는 것이 좋습니다.

관련 정보