ブログ

共通のフィールドで文字を連結する方法

at_shiita.ishigaki
2022年1月12日 13時29分

共通のフィールドで文字を連結するにはjoinコマンドを使用します。
以下の例では、100・200・300・400がフィールドとなります。

[armadillo ~]# cat << EOF > a.txt
100 hoge
200 fuga
300 piyo
EOF
[armadillo ~]# cat << EOF > b.txt
100 foo
200 bar
400 baz
EOF
[armadillo ~]# join a.txt b.txt
100 hoge foo
200 fuga bar

joinコマンドを使用することで、a.txtとb.txtで共通のフィールドである、100と200のフィールドが連結されます。
連結していない行を表示するには、-vオプションを使用します。
-vオプションに続いてファイル番号を指定することで、そのファイル番号で連結していない行を表示します。
※今回の例では、ファイル番号1がa.txt、ファイル番号2がb.txtとなります。

[armadillo ~]# join -v 1 a.txt b.txt
300 piyo
[armadillo ~]# join -v 1 -v 2 a.txt b.txt
300 piyo
400 baz

デフォルトでは空白がフィールドの区切り文字ですが、-tオプションで区切り文字を変更できます。
フィールドの区切り文字をカンマ区切りにすることで、csvファイルを連結することができます。

[armadillo ~]# cat a.txt | tr ' ' ',' > c.txt
[armadillo ~]# cat b.txt | tr ' ' ',' > d.txt
[armadillo ~]# join -t , c.txt d.txt
100,hoge,foo
200,fuga,bar