우리는 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 표준과 실제 차이점은 없습니다. wc
ksh93의 내장 기능 도 SunOS
출력과 일치하며 최근 Solaris 11에서는 출력 변경 없이 ksh93의 wc
라이브러리 구현 도 사용합니다.ksh93
스크립트가 하나 또는 다른 구현의 출력에 문제가 있는 경우 wc
이식할 수 없는 스크립트를 수정하는 것이 좋습니다.