Содержание файла перестроения на основе двух столбцов

Вход: файл содержит данные:

ID   Location  Domaind
1     20        X
1     5         y
1     25        Z
2     1         L
2     150       N
2     50        M
3     50        J
4     33        k
4      3        I

Я должен расположить эти Данные на основе идентификатора и Местоположения. Подразумевайте сначала, что расположенные ID=1 в порядке возрастания местоположения затем печатают домены слева направо тот же порядок как в месте.

Вывод как:

1      Y-X-Z
2      L-M-N
3        J
4       I-K
6
задан 31 October 2017 в 03:06

1 ответ

Я использовал бы awk управляйте как после.

awk '{arr[$1]=arr[$1]d[$1]$NF; d[$1]="-"}
    END{for (x in arr) print x"\t"arr[x]}' <(sort -V <(column -t infile))
  • column -t infile читает файл и здесь печатает просто столбцы в выравнивании по левому краю.
  • sort -V сортирует файл как Vвид ersion.
  • и awk просто читая в поля в названный массив arr с ключом, поскольку column#1 и значение как уважающий column#3, затем в конце печатают элементы.
  • Здесь я использовал замену процесса <(sort -V <(column -t infile)) в то время как мы могли использовать Каналы вместо этого, если Ваша оболочка не поддерживает его, поскольку muru указал /bin/dash не делает.

Вывод:

ID      Domaind
1       Y-X-Z
2       L-M-N
3       J
4       I-k

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

awk 'p!=$1 &&p{print l}{l=($1!=p)?$1FS$3:l"-"$3;p=$1}' <(sort -V <(column -t in))
3
ответ дан 23 November 2019 в 08:04

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

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