cut / paste / join
『cut』はファイルの各行から特定の列や文字範囲を切り出し、『paste』は複数ファイルの行を横に並べて貼り合わせ、『join』は共通フィールドをキーにして2つのファイルを結合するコマンドです。
構文
cut [オプション] [ファイル...] paste [オプション] [ファイル...] join [オプション] ファイル1 ファイル2
オプション一覧
| コマンド / オプション | 概要 |
|---|---|
| cut -d 区切り -f フィールド番号 | 区切り文字でフィールドを分割して指定番号のフィールドを取り出します。 |
| cut -f 1,3 | 1番目と3番目のフィールドを取り出します。 |
| cut -f 1-3 | 1〜3番目のフィールドを取り出します。 |
| cut -c 1-5 | 各行の1〜5文字目を取り出します。 |
| paste ファイル1 ファイル2 | 2つのファイルの対応する行をタブで区切って横に並べます。 |
| paste -d ',' ファイル1 ファイル2 | 指定した区切り文字で横に並べます。 |
| paste -s ファイル | ファイルの全行を1行にタブ区切りで並べます。 |
| join ファイル1 ファイル2 | 両ファイルの1列目をキーにして内部結合します(事前に sort が必要)。 |
| join -1 N -2 M ファイル1 ファイル2 | ファイル1のN列目とファイル2のM列目をキーにして結合します。 |
| join -a 1 ファイル1 ファイル2 | ファイル1で一致しなかった行も出力します(左外部結合)。 |
サンプルコード
以下のファイルを例に説明します。
data.csv
alice,30,Tokyo,engineer bob,25,Osaka,designer charlie,35,Nagoya,manager
names.txt
alice bob charlie
scores.txt
85 92 78
users.txt(IDでソート済み)
001 alice 002 bob 003 charlie
roles.txt(IDでソート済み)
001 engineer 002 designer 003 manager
『cut -d -f』で区切り文字とフィールド番号を指定して列を取り出します。
cut -d',' -f1,3 data.csv alice,Tokyo bob,Osaka charlie,Nagoya
『cut -f 1-2』で範囲指定もできます。
cut -d',' -f1-2 data.csv alice,30 bob,25 charlie,35
『cut -c』で文字位置で取り出します。
cut -c1-5 data.csv alice bob,2 charl
『paste』で2つのファイルを横に並べます(タブ区切り)。
paste names.txt scores.txt alice 85 bob 92 charlie 78
『paste -d』で区切り文字を指定します。
paste -d',' names.txt scores.txt alice,85 bob,92 charlie,78
『paste -s』でファイルの全行を1行にまとめます。
paste -s names.txt alice bob charlie
『join』で共通フィールドをキーに2つのファイルを結合します(事前にソートが必要)。
join users.txt roles.txt 001 alice engineer 002 bob designer 003 charlie manager
概要
『$ cut』は単純なフィールド抽出に便利ですが、フィールド内に区切り文字が含まれる場合(クォートされたCSVなど)は正しく処理できません。そのような複雑なケースでは『awk』を使います。
フィールドのカウントや並び替えには『sort』も参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。