質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

1回答

1095閲覧

awkの変数の扱い方について

yone_yone

総合スコア28

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2019/06/05 06:28

awkの変数についてわからないことがありましたので、質問させていただきます。

以下のような2つのファイルがあり、マッチする行のみを抽出したいと考えています。

file

1#a.txt 2BED600184 3BED600186 4BED600187

file

1#b.txt 2BED600184.txt BED611311.XML 0.890685 10 3BED600184.txt BED611312.XML 0.902536 10 4BED600186.txt BED600184.XML 0.093557 10 5BED600187.txt BED611312.XML 0.854495 10 6BED600188.txt BED600184.XML 0.168811 10

理想な出力

output

1BED600184.txt BED611311.XML 0.890685 10 2BED600184.txt BED611312.XML 0.902536 10 3BED600186.txt BED600184.XML 0.093557 10 4BED600187.txt BED611312.XML 0.854495 10

以下が作成したコードになります。

awk

1for a in `cat a.txt` ; do 2 awk -v "a=$a" 'BEGIN{FS=" "} $1 ~ /a/ {print $0}' b.txt 3done

このコードではawk内で変数aにラベルを代入しているのですが、
思ったような動作せず、何も出力されません。
また今回、for文で繰り返しているのですが、それぞれのラベルに対して別の処理を行いたいと
考えてるので、このようにしています。

変数を用いず、ラベルを直接入れて確認したところ、上手く動作したので、おそらく変数aの使い方が間違っているのではないかと思っております。

分かる方がいましたら、回答いただけると助かります。
※ご回答いただいた内容に質問させていただくこともあるかと思いますので、
※よろしければご返信いただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

awkについて詳しくはないのですが、
下記で実現できるのでは無いでしょうか?

bash

1for a in `cat a.txt` ; do 2 awk -v "a=$a" 'BEGIN{FS=" "} $1 ~ a {print $0}' b.txt 3done

正規表現の部分を下記のように記載すると'a'という文字に一致する正規表現となるため失敗していると思われます。

bash

1$1~/a/

そのため下記のように変数に一致するように書換える必要があります。

bash

1$1~a

追記

余談ですがおそらく下記のコードでもやりたいことは実現できるかと思います。

bash

1for a in `cat a.txt` ; do awk -F ' ' "$1~/$a/" b.txt ;done 2cat a.txt | xargs -L1 -I@ awk -F ' ' '$1~/@/' b.txt

投稿2019/06/05 06:45

編集2019/06/05 06:54
amanoese

総合スコア132

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yone_yone

2019/06/05 06:51

回答ありがとうございます。 無事動作確認できました。単純なことでした... ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問