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

SunOSwc出力は SYSVr4 の定義と一致します。

POSIX標準と実際の違いはありません。wcksh93の組み込み機能もSunOS出力と一致しており、最近のSolaris 11では、出力を変更せずにksh93のwcライブラリ実装も使用しています。ksh93

スクリプトが1つまたは別の実装の出力に問題がある場合は、移植wcできないスクリプトを修正することをお勧めします。

関連情報