2013-04-27 2 views
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?

ответ

1

Это:

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

Должно быть:

print " item:<"item">"; 

Awk может выглядеть очень похоже на C; перед именем переменной нет $. В awk значение $ указывает поле, поэтому $ item пытается использовать значение элемента в качестве индекса в записи. В моей реализации awk (Mac OS) ваш скрипт, написанный с ошибкой, быстро; Я предполагаю, что ваша реализация awk более разрешима (но не в этом случае полезна).

+0

Ох. Понимаю. Я работал с awk только кратко, поэтому я предположил, что он будет работать с переменными, как это делает bash. Я запускаю Kubuntu, который не сообщает мне никаких предупреждений или ошибок. благодаря –