Как определить разделитель «табуляция» с помощью «cut» в Bash?

Как определить разделитель «табуляция» с помощью «cut» в Bash?

Вот пример использования cutразбиения ввода на поля с помощью пробела-разделителя и получения второго поля:

cut -f2 -d' '

Как можно определить разделитель как табуляцию, а не пробел?

решение1

Два пути:

Нажмите Ctrl+ V, а затем, Tabчтобы использовать «дословно».цитируемая вставка.

cut -f2 -d'   ' infile

или напишите это так, чтобы использоватьANSI-C цитирование:

cut -f2 -d$'\t' infile

Форма $'...'кавычек не является частью языка оболочки POSIX (еще нет), но работает как минимум в ksh, mksh, zsh и Busybox в дополнение к Bash.

решение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

Это извлекает второе поле, разделенное табуляцией, из каждой строки ввода из 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}" 
}

Связанный контент