функция vlookup в unix с измененными столбцами

Использованиеawk:

awk '{print substr($18,1,12)}' input

Это напечатает символы 1 -12 столбца 18. Это предполагает, что ваш текстовый файл разделен пробелами. Что, скорее всего, не так.

Для CSV:

awk -F, '{print substr($18,1,12)}' input

На основе комментария Steeldriver о добавлении этого вывода в новый столбец:

awk '{$(NF+1) = substr($18,1,12)} 1' input > output

К сожалению, при этом создается новый файл. gawkможет изменить файл на месте, но лучше всего создать новый файл, а затем удалить старый.

0
01.05.2020, 16:16
2 ответа

Вам просто нужно изменить a[$1] = $2на a[$2] = $1, поэтому:

awk 'NR == FNR{ a[$2] = $1; next }; { print $1, $1 in a?a[$1]: "0" }' file2 file1

Однако это можно сократить до:

awk 'NR == FNR{ a[$2] = $1; next } { print $1, a[$1]+0 }' file2 file1

Обновление:Для чтения входных данных из вывода команд cmdX и cmdY .

awk 'NR == FNR{ a[$2] = $1; next } { print $1, a[$1]+0 }' <(cmdY) <(cmdX)

если используемая вами оболочка не поддерживает процесс -Замена :, вы можете сделать следующее:

( cmdY | ( cmdX | (
awk '
    NR == FNR{ a[$2] = $1; next } { print $1, a[$1]+0 }
' /dev/fd/3 /dev/fd/4 ) 4<&0 ) 3<&0 )
3
28.04.2021, 23:16

Утилита joinможет сопоставлять совпадения, но требуется второй проход и printfформатирование, чтобы сопоставить промахи, а затем напечатать0:

join -2 2 file{1,2} ; printf '%s 0\n' $(join -v 1 -2 2 file{1,2})

Примечание:joinпредполагает, что оба файла сортируются в одном и том же порядке.

0
28.04.2021, 23:16

Теги

Похожие вопросы