1

フィールドを変数に保持する必要がある単純なスクリプトを作成しようとしています。これは私が持っているものです:

BEGIN{
  FS=":";
}

{
    print;
    item=$1;
    print "    "$1;
    print "    "$2;
    print "  item:<"$item">";
}

私が理解していないのは、スクリプトに行を渡すと、これが出力になるということです:

main.o: src/main.cpp src/CMenu.h src/CUtils.h src/CAbsPlayer.h \ //given line
    main.o                                                       //field 1   
     src/main.cpp src/CMenu.h src/CUtils.h src/CAbsPlayer.h \    //field 2
  item:<main.o: src/main.cpp src/CMenu.h src/CUtils.h src/CAbsPlayer.h \> //field1?!

なぜこれが機能しないのですか?行全体がに保存されるのはなぜitemですか?

4

1 に答える 1

1

これ:

print "  item:<"$item">";

次のようにする必要があります。

print "  item:<"item">";

awk は C によく似ています。変数名の前に $ はありません。awk では、$ はフィールドを示すため、$item は item の値をレコードへのインデックスとして使用しようとします。私のawk(Mac OS)の実装では、書かれたスクリプトはすぐに失敗します。あなたの awk 実装はより寛容だと思います(ただし、この場合は役に立たない方法です)。

于 2013-04-27T09:48:11.297 に答える