言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. cut / paste / join

cut / paste / join

対応: Bash 1.0(1989)

『cut』はファイルの各行から特定の列や文字範囲を切り出し、『paste』は複数ファイルの行を横に並べて貼り合わせ、『join』は共通フィールドをキーにして2つのファイルを結合するコマンドです。

構文

cut [オプション] [ファイル...]
paste [オプション] [ファイル...]
join [オプション] ファイル1 ファイル2

オプション一覧

コマンド / オプション概要
cut -d 区切り -f フィールド番号区切り文字でフィールドを分割して指定番号のフィールドを取り出します。
cut -f 1,31番目と3番目のフィールドを取り出します。
cut -f 1-31〜3番目のフィールドを取り出します。
cut -c 1-5各行の1〜5文字目を取り出します。
paste ファイル1 ファイル22つのファイルの対応する行をタブで区切って横に並べます。
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
五条悟,28,Tokyo,engineer
虎杖悠仁,15,Osaka,designer
伏黒恵,15,Nagoya,manager
names.txt
五条悟
虎杖悠仁
伏黒恵
scores.txt
85
92
78
users.txt(IDでソート済み)
001 五条悟
002 虎杖悠仁
003 伏黒恵
roles.txt(IDでソート済み)
001 engineer
002 designer
003 manager

『cut -d -f』で区切り文字とフィールド番号を指定して列を取り出します。

cut -d',' -f1,3 data.csv
五条悟,Tokyo
虎杖悠仁,Osaka
伏黒恵,Nagoya

『cut -f 1-2』で範囲指定もできます。

cut -d',' -f1-2 data.csv
五条悟,28
虎杖悠仁,15
伏黒恵,15

『cut -c』で文字位置で取り出します。

cut -c1-3 data.csv
五条悟
虎杖悠
伏黒恵

『paste』で2つのファイルを横に並べます(タブ区切り)。

paste names.txt scores.txt
五条悟	85
虎杖悠仁	92
伏黒恵	78

『paste -d』で区切り文字を指定します。

paste -d',' names.txt scores.txt
五条悟,85
虎杖悠仁,92
伏黒恵,78

『paste -s』でファイルの全行を1行にまとめます。

paste -s names.txt
五条悟	虎杖悠仁	伏黒恵

『join』で共通フィールドをキーに2つのファイルを結合します(事前にソートが必要)。

join users.txt roles.txt
001 五条悟 engineer
002 虎杖悠仁 designer
003 伏黒恵 manager

概要

$ cut』は単純なフィールド抽出に便利ですが、フィールド内に区切り文字が含まれる場合(クォートされたCSVなど)は正しく処理できません。そのような複雑なケースでは『awk』を使います。

フィールドのカウントや並び替えには『sort』も参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。