1

ユーザー入力からawkに変数を渡そうとしています:

オプションがmanファイルにリストされているにもかかわらず、「awk:invalid-voption」というエラーでawk-vのバリエーションを試しました。

#! /bin/bash
read -p "Enter ClassID:" CLASS
read -p "Enter FacultyName:" FACULTY


awk '/FacultyName/ {print}' data-new.csv > $FACULTY.csv
awk -vclass=${CLASS} '/class/ {print}' data-new.csv >> $FACULTY.csv 


echo Class is $CLASS
echo Faculty member is $FACULTY
4

2 に答える 2

7

awkの一部のバージョンでは、-vと変数の割り当ての間にスペースが必要です。また、awkに渡される前に、シェルによる不要な解析(単語の分割、ワイルドカードの展開など)を防ぐために、bash変数を二重引用符で囲む必要があります。最後に、awk/.../には定数正規表現があります(つまり/class/、変数「class」の値ではなく、文字列「class」を検索します)。これらすべてが修正されたので、これがあなたが望むことをするだろうと私が思うawkコマンドです:

awk -v class="${CLASS}" '$0 ~ class {print}' data-new.csv >> $FACULTY.csv

さて、次の代わりにこれを使用している理由はありますか?

grep "$CLASS" data-new.csv >> $FACULTY.csv
于 2013-01-04T06:46:41.813 に答える
1

あなたのスクリプトは私にはわかりませんが、これらはすべて機能します:

CLASS=ec123
echo | awk -vclass=$CLASS '{print class}'
echo | awk -vclass=${CLASS} '{print class}'
于 2013-01-04T05:47:33.203 に答える