3

皆さん:

最後のフィールドに + 記号を含む文字列を渡すときに awk サブコマンドに問題があります。末尾のフィールドセパレーターなしで、レコードの最後のフィールドを除くすべてを出力しようとしています。例えば:

echo "dog cat fish hamster" | awk 'sub(FS $NF, x)'

これにより、「犬猫魚」の目的の出力が生成されます

echo "dog cat fish +hamster" | awk 'sub(FS $NF, x)'

これにより、出力がないように見えるものが生成されます。

echo "dog +cat fish hamster" | awk 'sub(FS $NF, x)'

これは、"dog +cat fish" の予想される出力も生成します。

awk を使用して、scp でファイルを転送する際に使用する 1 つ以上のソース ディレクトリと単一の宛先ディレクトリを含む構成ファイルを解析しています。/app/tgv+/inなどの一部の宛先ディレクトリには + が含まれており、レガシー コードが原因でマウント ポイントを変更できません。この問題は、最後のフィールドに + が表示された場合にのみ発生するようです。私が何か間違ったことをしたのか、それとも単に awk 文字列パーサーの問題なのかを判断するのを手伝ってくれたら、とても感謝しています。ご協力いただきありがとうございます。

DGC

4

1 に答える 1

5

ここでの問題は、 の最初の引数がsub()正規表現であると想定されていることです。これは、絶対文字列に一致するほとんどの場合、気にしません。しかし、あなたの場合 FS $NF+hamsterこれは正規表現として扱われるため、何とも一致せず、何も印刷されません。

{1}hamsterの代わりに のようなものを使用しても+hamster、出力はありません。

より良いアプローチは、方法を変更することです。簡単な方法は次のとおりです。

echo "dog cat fish +hamster" | awk 'NF--'
于 2013-05-29T19:13:41.633 に答える