awkシステムコールLinux - awkでシェルを呼び出すときに拡張正規表現を使用する

awkシステムコールLinux - awkでシェルを呼び出すときに拡張正規表現を使用する

awkからシステムコマンドを呼び出すことができることは非常に便利です。しかし、正規表現のシェル拡張を使用しようとするとうまくいかないことがわかります。

これは、最近Linuxで予想されるように、awkが/bin/bashの代わりに/bin/shを呼び出すためです。

awkでシステムを呼び出すときに拡張正規表現が機能するようにするにはどうすればよいですか?

ベストアンサー1

awkは完璧に動作することができますが、なぜbashでそのように多くのことをする必要があるのか​​わかりません。

BEGIN {
    filename[0]="/media/Pan/test-data/The_long_file.gz";
    filename[1]="/media/Pan/test-data/The_long_file";

    for (n=0; n<2; n++) {
        print "Contents  of file: " filename[n];

        if (filename[n] ~ /\.gz$/) {
            command = "gunzip --to-stdout " filename[n]
            while (( command | getline file_contents ) > 0 ) {
                print file_contents
            }
            close(command)
        }
        else {
            while (( getline line < filename[n]) > 0 ) {
                print line
            }
        }
    }
}

おすすめ記事