言語
日本語
English

Caution

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

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

cut / paste / join

『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
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』も参照してください。

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