2017-07-10 8 views
0

私はcsvファイルを持っており、certailフィールドが特定の文字列で終わる場合はawkを使用して行を印刷しようとしています。したがって、たとえば、私は、CSVファイルの下にあります。フィールドの末尾がAWKの文字列と一致する場合の行の印刷

2,efgh,.abcd 
4,mnop,.abcd 

しかし、私は別の結果を取得しています:

col1,col2,col3 
1,abcd,.abcd_efg 
2,efgh,.abcd 
3,ijkl,.abcd_mno 
4,mnop,.abcd 
5,qrst,.abcd_uvw 

これは私が後に求めている結果です。これは私が使用していますawkコマンドです:

cat file.csv | awk -F"," '{if ($3 ~ ".abcd") print $0}' 

とこれは私が取得しています結果である:

1,abcd,.abcd_efg 
2,efgh,.abcd 
3,ijkl,.abcd_mno 
4,mnop,.abcd 
5,qrst,.abcd_uvw 

Iイベントは以下試したが、それはうまくいきませんでしたので、マッチした何が返されます。

cat file.csv | awk -F"," '{if ($3 ~ ".abcd$") print $0}' 

何か問題が発生している可能性がありますか?私はこの結果を得るために間違った表現を使用していますか?

EDIT:これは私がケントのソリューションを試してみましたところ、私が試したが、それはうまくいきませんでした別のコマンドです:

cat file.csv | awk -F"," '$3 ~ "[.]abcd"' 

答えて

0

以下のようにあなたのawkコマンドを修正することができ、

$ cat file.csv | awk '$3 ~ /\.abcd$/ {print $0}' 
2 efgh .abcd 
4 mnop .abcd 

簡単な説明、

  • $3 ~ /.abcd$/$3は正規表現.abcd$、印刷$0

変更した質問によると一致した場合、あなたがawkコマンドを変更することがあります。の

cat file.csv | awk -F, '$3 ~ /\.abcd$/ {print $0}' 
+1

'。 (ドット) 'は任意の文字を意味します – Kent

+0

ありがとうございます。私はそれを '\ .'に変更します。 – CWLiu

+0

@CWLiu: '{print $ 0}'は存在する必要はありません。それは本質的に気をつけます – Inian

2
  • まずcat file|awk ...catは無用です、ちょうどawk ... file

  • あなたの入力テキストは単一のコンマ、hあなたはFS=","になっていますか?

  • あなたは、比較の正確な文字列操作を行う代わりに、$3 ~ /regex/

$3 == "whatever"を使用したい場合はだからあなたのコードがに変更することができます:あなたが本当に正規表現を愛し、そして場合

awk '$3 == ".abcd"' file 
  • 正規表現マッチの方法でそれを行う:

    awk '$3 ~ "[.]abcd$"' file 
    

または

awk '$3 ~ /^[.]abcd$/' file 

はあなたが必要なものに依存します。

+0

ファイルはcsvファイルであり、カンマがありますが、それらを含めるのを忘れました。私はちょうど私の質問を編集し、彼らに –

+0

を追加しました、私はあなたのソリューションを試して、それは動作しませんでした。 FS = "、"を設定して正規表現で試しましたが、うまくいきませんでした。おそらく、フィールドの終わりに特定の文字列を検索しているからでしょうか? –

+0

@ Dr.Bake何を試しましたか?コマンドを貼り付けます。 – Kent

関連する問題