Таблица поиска awk, замена пустого столбца

Я пытаюсь использовать таблицу поиска для поиска и замены двух определенных столбцов и получения пустого столбца в качестве вывода. Я следил за синтаксисом нескольких примеров таблиц поиска, которые я нашел в стеке, но без радости. Вот фрагменты из каждого файла.

Пример таблицы поиска - хочу найти экземпляры столбца 1 в моем файле данных и заменить их соответствующим значением в столбце 2 (первая строка - это заголовок):

 #xyz   type
 N      400
 C13    401
 13A    402
 13B    402
 13C    402
 C14    405

Подставляемый исходный файл имеет следующий формат:

 1  N      0.293000    2.545000   16.605000     0     2     6    10    14
 2  C13    0.197000    2.816000   15.141000     0     1
 3  13A    1.173000    2.887000   14.676000     0
 4  13B   -0.319000    3.756000   14.937000     0
 5  13C   -0.351000    1.998000   14.678000     0
 6  C14    0.749000    3.776000   17.277000     0     1

Соответствующие значения в столбце 2 таблицы поиска заменят значения в столбце 6 моего исходного файла (в настоящее время все нули). Вот однострочник awk, который, как я думал, должен работать:

awk -v OFS='\t' 'NR==1 { next } FNR==NR { a[$1]=$2; next } $2 in a { $6=a[$1] }1' lookup.txt source.txt

Но мой вывод по существу удаляет всю запись для столбца 6:

1   N     0.293000  2.545000    16.605000       2   6   10  14
2   C13   0.197000  2.816000    15.141000       1
3   13A   1.173000  2.887000    14.676000   
4   13B  -0.319000  3.756000    14.937000   
5   13C  -0.351000  1.998000    14.678000   
6   C14   0.749000  3.776000    17.277000       1

(Шестой столбец должен быть от 400 до 405. Я рассматривал возможность использования sed, но у меня есть повторяющиеся значения в исходных и выходных столбцах моей таблицы поиска, поэтому в данном случае это не сработает. Что расстраивает, так это то, что у меня был этот - liner работал почти с тем же исходным файлом на прошлой неделе, но теперь может получить только такое поведение.Я хотел бы иметь возможность изменить мой вызов awk для одновременного поиска двух разных столбцов, но пока хотел начать с простого. Спасибо!

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас в скрипте $6=a[$1] вместо $6=a[$2].

$ awk -v OFS='\t' 'NR==FNR{map[$1]=$2; next} {$6=map[$2]} 1' file1 file2
1       N       0.293000        2.545000        16.605000       400     2       6       10      14
2       C13     0.197000        2.816000        15.141000       401     1
3       13A     1.173000        2.887000        14.676000       402
4       13B     -0.319000       3.756000        14.937000       402
5       13C     -0.351000       1.998000        14.678000       402
6       C14     0.749000        3.776000        17.277000       405     1

Я знал, что мне не хватает чего-то маленького - большое спасибо, Эд! Мне следовало бы почерпнуть эту деталь из нескольких ваших сообщений, которые я видел, в которых объясняется, как использовать таблицы поиска.

blakem 31.03.2021 23:20

Другие вопросы по теме