
例えば、cut
コマンドはパラメータ-fを取ることができ、man
これらのフィールドのみを選択します。-s オプションが指定されていない限り、区切り文字を含まない行も出力します。
この文脈では、フィールドとは何でしょうか?
答え1
「フィールド」という用語は、多くの場合、 や などのツールに関連付けられますcut
。awk
フィールドは、データを取得して特定の文字を使用して区切った場合、列に相当するデータに似ています。通常、これを行うために使用される文字は ですSpace。
ただし、ほとんどのツールと同様に、設定可能です。例:
- awk =
awk -F"," ...
- はカンマで区切ります (つまり,)。 - cut =
cut -d"," ...
- はカンマで区切ります (つまり,)。
例
最初の例は、awk
スペースで自動的に分割される方法を示しています。
$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.
これは、cut
スペースで分割する方法も示しています。
$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.
cut
ここでは、列 1 と 4 を返すために使用している列データの CSV リストがあります。
$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4
Awk でも次のことができます:
$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4
Awk は、さまざまな区切り文字の処理にも少し長けています。ここでは、区切り文字が同時に混在している場所Tabsも処理しています。Spaces
$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.
cut の -s スイッチはどうでしょうか?
このスイッチに関しては、スイッチcut
で指定された区切り文字を含まない行を印刷しないように指示するだけです-d
。
例
このファイルがあったとします。
$ cat sample.txt
This is a space string.
This is a space and tab string.
Thisstringcontainsneither.
注記:上記の 2 番目の文字列にはスペースとタブが含まれています。
cut
ここで、スイッチの有無にかかわらずこれらの文字列を処理すると、次のようになります-s
。
$ cut -d" " -f1-6 sample.txt
This is a space string.
This is a space
Thisstringcontainsneither.
$ cut -d" " -f1-6 -s sample.txt
This is a space string.
This is a space
-s
2 番目の例では、スイッチによって区切り文字を含まない文字列が出力から省略されていることがわかりますSpace。
答え2
POSIXによれば、フィールドとは、以下のいずれかの文字で区切られた行の一部である。IFS
、"入力フィールドセパレーター(または内部フィールドセパレータ)。" このデフォルト値は、スペース、水平タブ、改行の順です。Bash では、を実行してprintf '%q\n' "$IFS"
値を確認できます。
答え3
ユーティリティによって異なりますが、 の場合cut
、「フィールド」はテキスト行の先頭から始まり、最初のタブまでのすべてが含まれます。2 番目のフィールドは、最初のタブの次の文字から次のタブまでです。3 番目、4 番目、... と続きます。タブ間、または行頭とタブ間、またはタブと行末の間のすべてが含まれます。
「-d」オプションでフィールド区切り文字を指定しない限り、cut -d: -f2
最初のコロン (':') 文字と 2 番目のコロン (':') 文字の間にあるすべての内容が取得されます。
他のユーティリティでは定義が異なりますが、タブ文字が一般的です。 は、1 つ以上の空白文字に基づいてフィールドを分割するため、厳しすぎるawk
場合に適切な代替手段です。これは多くの状況でより自然ですが、構文を少し知っておく必要があります。 に従って 2 番目のフィールドを印刷するには、次のようにします。cut
awk
awk
awk '{print $2}'
sort
私を騙すのはこれです。現在のsort
マニュアル ページには、フィールド区切り文字として「非空白から空白への移行」のようなことが書かれています。何らかの理由で、sort
フィールドを正しく定義するには数回の試行が必要です。join
どうやら「空白で区切られた」フィールドを使用しているようです。これがawk
デフォルトで行われることになっています。
この話の教訓は、注意して、分からない場合は実験してみることです。
答え4
コマンドを使用する場合cut
、2つの主な引数が必要です
-d : 区切り文字を表す
-f : 入力ファイルから切り取るフィールドを表します
Ex. cut - d "|" - f1, 2 input_filename
ここではoutput
区切り文字「|」で区切られ、入力ファイルから2つのフィールドのみが切り取られます。
ファイルに次の行がある場合
Alex|120000|Admin|1999
次に、2つのフィールドを切り取ります。
Alex|120000