Bash で 'cut' を使用して 'タブ' 区切り文字を定義するにはどうすればよいでしょうか?

Bash で 'cut' を使用して 'タブ' 区切り文字を定義するにはどうすればよいでしょうか?

cut以下は、スペース区切り文字を使用して入力をフィールドに分割し、2 番目のフィールドを取得する例です。

cut -f2 -d' '

区切り文字をスペースではなくタブとして定義するにはどうすればよいですか?

答え1

ふたつのやり方:

Ctrl+を押してVからTab「verbatim」を使用します引用挿入

cut -f2 -d'   ' infile

または、このように書いてANSI-C 引用符:

cut -f2 -d$'\t' infile

引用符の形式$'...'はPOSIXシェル言語の一部ではありません(まだ) ですが、Bash に加えて少なくとも ksh、mksh、zsh、Busybox でも動作します。

答え2

デフォルトはタブです。

を参照してくださいマニュアルページをカット

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

だから、こう書くだけでいいのです

cut -f 2

答え3

awk -F '\t' '{ print $2 }' inputfile

これは、入力の各行の 2 番目のタブ区切りフィールドを抽出しますinputfile

答え4

あるいは、関数内で cut をラップすることもできます。

function getColumns ()
{
    local -r delimiter="${1:?}"
    local -r columns="${2:?}"

    if [[ "$delimiter" == '\t' || "$delimter" == "tab" ]]; then
        cut "--fields=${columns}"
        return
    fi

    cut "--delimiter=${delimiter}" "--fields=${columns}" 
}

関連情報