私たちは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標準と実際の違いはありません。wc
ksh93の組み込み機能もSunOS
出力と一致しており、最近のSolaris 11では、出力を変更せずにksh93のwc
ライブラリ実装も使用しています。ksh93
スクリプトが1つまたは別の実装の出力に問題がある場合は、移植wc
できないスクリプトを修正することをお勧めします。