2017-08-07 7 views
3

デリミタ「petOwner」を、 'petName'、 'petType'を入力すると、ペットの所有者とペットの種類を抽出できます。これまでのところ、私が試したは、私がどのように見えるpet_owners.txtというファイル持って

Jane,cat 
John,dog 
... 
Jake,dog 

:私の所望の出力がある

awk < pet_owners.txt -F'['petOwner''petName''petType']' '{print $1 $3}' 

が、結果は、改行の束です。

どのように私はこれを達成するためのアイデアですか?あなたの試みは、正規表現の文脈で[]がどのかもしれない(「ブラケット表現」区切り文字であり、どのようなその内部に入ることは文字の集合であるため、主に、それはだ、働いていなかった理由については

答えて

3
$ awk -F'[:,]' -v OFS=',' '{print $2,$6}' file 
Jane,cat 
John,dog 
Jake,dog 

あなたが書いたそうとき)個々の文字、範囲、リスト、および/またはクラスがあること:

などの文字 petなどの文字列 petOwnerのないセットのセットに FSを設定します
-F'['petOwner''petName''petType']' 

複数のintあなたが書いたのと全く同じ理由でまったく同じ理由でシェルの外に飛び出したときに、'は互いに打ち消し合っています。つまり、そこにはシェルが展開するメタキャラクタはありません。-F'[petOwnerpetNamepetType]'文字列のセット(実際にそうmetacharsに注意正規表現)になるにFSを設定するには

:あなたはまた、CHARではなく、この形式の区切り文字を書くことができます

-F'petOwner|petName|petType' 
1

$ awk -F'pet(Owner|Name|Type):' '{print $2,$4}' file 

Jane, cat 
John, dog 

Jake, dog 
0
を設定しました

セパレータの定義ではなく、フィールドの定義もできます。そのために、あなたはこのように、FPAT変数を使用します。

~ $ awk '{ print $2,$6 }' FPAT="[^,:]+" OFS="," pet_owners.txt 
Jane,cat 
John,dog 

あなたはコンマまたはコロンないフィールドのすべてとして定義しているこの方法。

プログラムを簡単にすることがあります。

OFSは、出力フィールドセパレータをコンマに設定します。

+0

FPATはgawk専用です。 –

関連する問題