Вопрос Как найти те же строки и объединить значения?


У меня есть следующая таблица, разделенная таблицами:

NM_000057   0
NM_000059   0
NM_000060   0
NM_000061   0
NM_000062   0
NM_000063   0
NM_000063   0
NM_000063   3
NM_000063   2
NM_000063   0
NM_000063   0
NM_000063   0
NM_000064   0
NM_000065   0
NM_000066   0
NM_000067   0
NM_000068   0
NM_000069   0
NM_000070   0

Я хочу найти первое значение, если есть более одного равного, я хочу объединить его и добавить значения из второго столбца. В примере:

NM_000057   0
NM_000059   0
NM_000060   0
NM_000061   0
NM_000062   0
**NM_000063 5**
NM_000064   0
NM_000065   0
NM_000066   0
NM_000067   0
NM_000068   0
NM_000069   0
NM_000070   0

Спасибо!


4
2017-09-26 09:56


происхождения


Просто вопрос, чтобы убедиться: где должна идти линия? Я вижу, что ваши записи пронумерованы. Вы хотите сохранить порядок строк? Или можно добавить новую строку в файл? - Sergiy Kolodyazhnyy
Я хотел бы создать новый файл только с уникальными записями и суммой значений (которые находятся во втором столбце), которые одинаково названы. Сохранять порядок строк тоже было бы неплохо. - Joan Gibert Fernandez


ответы:


Используйте «awk»,

awk '{seen[$1]+=$2} END{for (x in seen) print x, seen[x]}' infile > outfile

В вышеприведенной команде awk, эта «увиденная [$ 1] + = $ 2» часть выполняет задание, переменная $ 1 как ключевая фраза, суммирующая значение второго столбца при замеченном ключевом ключе.

И в конце мы перебираем видимый массив с переменной x как переменную и печатаем ключи, увиденные в первом столбце, а затем результат суммы каждого ключа, увидев [x].


2
2017-09-26 10:05



Здравствуй! Спасибо! Эта команда, похоже, смотрит только на первую строку моего файла ... - Joan Gibert Fernandez
@JoanGibertFernandez, какие строки завершают ваш файл (Linux / DOS / Mac)? - steeldriver
@steeldriver мой выходной файл имеет только первую строку входного файла. В примере: NM_000057 0 - Joan Gibert Fernandez
@JoanGibertFernandez, пожалуйста, запустите команду file на ваше вход файл данных (например, file input). Отвечает ли это что-то вроде ASCII text, with CR line terminators? - steeldriver
@steeldriver да. Это текст ASCII, с терминаторами линии CR - Joan Gibert Fernandez


Недавно открыв GNU Datamash, Я собираюсь бросить

datamash groupby 1 sum 2 < input

Если ваши данные еще не отсортированы, вам может потребоваться добавить -s , и если он отделен другими пробелами (вместо вкладок), добавьте -W


1
2017-09-26 10:18



Здравствуй! Спасибо, но кажется, что у меня нет datamash в моем MacOS. Является ли он эксклюзивным для Linux? - Joan Gibert Fernandez
@JoanGibertFernandez версия должна быть доступна через brew Я думаю - см. brewformulas.org/Datamash - или вы можете построить его из источника - steeldriver
@JoanGibertFernandez ... хотя вы действительно не должны задавать вопросы OSX на AskUbuntu, точно по той причине, что вы только что обнаружили - ответы, которые могут не всегда применяться к вашей ОС - steeldriver