$ sort file.txt \
| grep -f <(cut -d' ' -f1 file.txt | sort | uniq -d) \
| awk 'last && last != $1 { printf "\n" }; { last=$1 ; print}'
542ed609dfc4d0cae44c4b7be6d66382 mba.txt
542ed609dfc4d0cae44c4b7be6d66382 tyrion final.txt
5ee434a2ebcf4c3c98ee07e9c1efddc0 foo.txt
5ee434a2ebcf4c3c98ee07e9c1efddc0 imac.txt
(Спасибо "cas" за предложение awk.)
(И спасибо "steeldriver" за то, что заметил ошибку.)
Использование языка программирования R -
Текстовые файлы были сохранены, а еще один -или -символ пробела был заменен одиночной табуляцией. Два файла данных были прочитаны в R :
.> group0 <- read.delim("/Users/admin/bygroup.0", header=FALSE)
> group2 <- read.delim("/Users/admin/bygroup.2", header=FALSE)
> head(group0)
V1 V2 V3 V4
1 ancient-american mercury 1 164
2 ancient-american mh25 2 8717664
3 ancient-neolith tk11 262 40074321970
4 ancientdna jk21 6936 17069206689
5 ancientdna rm20 11267 372606702813
6 ancientgen ab34 1573 27800468142
> head(group2)
V1 V2 V3 V4
1 ancient-american mercury 1 160
2 ancient-american mh25 2 10362712888
3 ancient-neolith tk11 264 43842268110
4 ancientdna jk21 6919 16379509855
5 ancientdna rm20 11268 324906365415
6 ancientgen ab34 1577 33947364202
Чтобы объединить файлы данных, используйте функцию R merge()
:
> merge(group0, group2, by = c("V1","V2"))
V1 V2 V3.x V4.x V3.y V4.y
1 ancient-american mercury 1 164 1 160
2 ancient-american mh25 2 8717664 2 10362712888
3 ancient-neolith tk11 262 40074321970 264 43842268110
4 ancientdna jk21 6936 17069206689 6919 16379509855
5 ancientdna rm20 11267 372606702813 11268 324906365415
6 ancientgen ab34 1573 27800468142 1577 33947364202
7 ancientgen dg11 3516 45081427920 3518 48092138390
8 ancientgen fa8 7179 462396221983 7174 472364587220
9 ancientgen mp15 41 10248223517 39 32487920045
10 ancientgen mp18 254 1049351143 254 1058177852
11 ancientgen rm20 15100 1565340401 15104 998615135
12 ancientgen tc9 1695 89861489631 1692 94858351562
Данные можно снова записать, используя функции write.delim()
или write.csv()
. Для получения справки введите команду в приглашении, перед которым стоит вопросительный знак -, например ?getwd()
, ?setwd()
, ?read.delim()
или ?merge()
.
[Примечание :В зависимости от возраста вашей установки R -вам, возможно, придется включать параметр stringsAsFactors=FALSE
в каждый вызов функции read.delim()
].
https://www.r-project.org/
https://cran.r-project.org/index.html