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の理論的根拠で述べられている問題を避けるために、意図的に列の間にスペースを残しました。

おすすめ記事