VOOZH about

URL: https://qiita.com/akira_kikaku/items/1e74aeb8746ca316ee1a

⇱ awkによるマッチング(ワンライナー) #Bash - Qiita


👁 Image
2

Go to list of users who liked

1

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 5 years have passed since last update.

@akira_kikaku(複数の精鋭メンバーでお仕事可能です。 良いお仕事さがしていますー)

awkによるマッチング(ワンライナー)

2
Last updated at Posted at 2018-03-03

マッチング

ExcelのVlookup関数のようにawkでも簡単にマッチングができます。しかもワンライナーでできます。

データサンプル

[root@akirakikaku tmp]# cat a
a 232
b 999
c 655
d 888
f 755
[root@akirakikaku tmp]# cat b
544 a hjhgjgh
110 c fdgdfg
997 d jhgjhg
554 e jhgjhgjghdd
[root@akirakikaku tmp]#

awkマッチング…同一レコード表示

  • aファイルの1列目とbファイルの2列目をマッチング
  • 同一レコードのみ表示
[root@akirakikaku tmp]# cat a | awk 'BEGIN{ while((getline < "b") > 0){key[$2]=$0}} key[$1]{print $0,key[$1]}'
a 232 544 a hjhgjgh
c 655 110 c fdgdfg
d 888 997 d jhgjhg
[root@akirakikaku tmp]#

awkマッチング…aファイルと同一key

  • aファイルの1列目とbファイルの2列目をマッチング
  • aファイルはすべて。bファイルは同一レコード。

[root@akirakikaku tmp]# cat a | awk 'BEGIN{ while((getline < "b") > 0){key[$2]=$0}} {print $0,key[$1]}'
a 232 544 a hjhgjgh
b 999
c 655 110 c fdgdfg
d 888 997 d jhgjhg
f 755
[root@akirakikaku tmp]#

awkマッチング…bファイルと同一key

  • aファイルの1列目とbファイルの2列目をマッチング
  • bファイルはすべて。aファイルは同一レコード。
[root@akirakikaku tmp]# cat b | awk 'BEGIN{ while((getline < "a") > 0){key[$1]=$0}} {print $0,key[$2]}'
544 a hjhgjgh a 232
110 c fdgdfg c 655
997 d jhgjhg d 888
554 e jhgjhgjghdd
[root@akirakikaku tmp]#

awk解説

cat a | \
 awk '
 BEGIN{ 
 while((getline < "b") > 0){ # bファイルを全部読み込み
 key[$2]=$0 # 連想配列
 } # 2列をキーにしてレコード全体を格納
 } 
 { # aファイルのレコード全体と
 print $0,key[$1] # キーが存在している連想配列を出力
 }'
2

Go to list of users who liked

1
0

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2

Go to list of users who liked

1