Вход: файл содержит данные:
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
Я использовал бы 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))