「フィールド」という用語は、cut
などのツールに関連付けられることがよくあります。 そして awk
.データを取得して特定の文字を使用して区切ると、フィールドは列に相当するデータに似ています。通常、これを行うために使用される文字は スペース です .
ただし、ほとんどのツールと同様に、構成可能です。例:
- 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.
ここに、使用している列データの CSV リストがあります cut
列 1 と 4 を返します。
$ 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 は、さまざまな分離文字の処理にも少し長けています。ここでは タブ を扱っています スペースとともに それらが同時に混ざり合っている場所:
$ 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
2 番目の例では、-s
が switch は、区切り文字 Space を含まない文字列を出力から除外しました .
POSIX によるフィールドは、IFS
のいずれかの文字で区切られた行の一部です。 、「入力フィールド区切り (または内部フィールド区切り これのデフォルト値は、スペース、水平タブレータ、改行が続きます。Bash では、printf '%q\n' "$IFS"
を実行できます。
問題のユーティリティに依存しますが、 cut
の場合 、「フィールド」はテキスト行の先頭から始まり、最初のタブまでのすべてを含みます。 2 番目のフィールドは、最初のタブの後の文字から次のタブまで続きます。 3 番目、4 番目、... タブの間、または行頭とタブの間、またはタブと行末の間のすべて。
「-d」オプションでフィールド区切り文字を指定しない場合:cut -d: -f2
1 番目と 2 番目のコロン (':') 文字の間のすべてを取得します。
他のユーティリティの定義は異なりますが、タブ文字が一般的です。 awk
cut
の場合は、適切なフォールバックです awk
のように厳しすぎます 1 つ以上の空白文字に基づいてフィールドを分割します。これは多くの状況で少し自然ですが、構文について少し知っておく必要があります。 awk
に従って 2 番目のフィールドを出力するには :
awk '{print $2}'
sort
私をだますものです。私の現在の sort
マニュアルページには、フィールドセパレーターについて「非空白から空白への移行」のようなことが書かれています。何らかの理由で、sort
を取得するのに数回の試行が必要です フィールドが正しく定義されています。 join
どうやら「空白で区切られた」フィールドを使用しているようです。これは awk
です デフォルトで行うことを目的としています。
この話の教訓は、注意深く、わからない場合は実験することです。