awk определяют уникальные строки на основе поднабора столбцов

Просто запустите

$ echo 1 > /proc/sys/abi/ldt16

, а затем запустите приложение через вино. Это временно разрешает поддержку 16 бит в ядре.

3
задан 19 May 2017 в 10:45

9 ответов

Чтобы напечатать определенный столбец, скажем, столбцы 1 и 4, просто запустите:

awk -F',' '{print $1, $4}' file

Команда здесь - попросить awk распечатать указанный столбец разделенных символом ','

Вы можете изменить номер столбца, добавить / удалить $ NUM для получения разных столбцов.

В сочетании с sort вы получите уникальные строки :

awk -F',' '{print $1, $4}' file | sort -u

Флаг -u удаляет повторяющиеся элементы с выхода.

1
ответ дан 22 May 2018 в 22:29
  • 1
    Работает по запросу и может быть изменен для n столбцов, например. [F1]. Переносить, но не показывать из-за моей низкой репутации. – conor 19 May 2017 в 08:41
  • 2
    Я считаю, что вы также можете использовать sort -u вместо sort | uniq – grooveplex 19 May 2017 в 10:18
  • 3
    @grooveplex о, правильно! Спасибо за напоминание! – P.-H. Lin 19 May 2017 в 10:31

Чтобы напечатать определенный столбец, скажем, столбцы 1 и 4, просто запустите:

awk -F',' '{print $1, $4}' file

Команда здесь - попросить awk распечатать указанный столбец разделенных символом ','

Вы можете изменить номер столбца, добавить / удалить $ NUM для получения разных столбцов.

В сочетании с sort вы получите уникальные строки :

awk -F',' '{print $1, $4}' file | sort -u

Флаг -u удаляет повторяющиеся элементы с выхода.

1
ответ дан 18 July 2018 в 13:04

Чтобы напечатать определенный столбец, скажем, столбцы 1 и 4, просто запустите:

awk -F',' '{print $1, $4}' file

Команда здесь - попросить awk распечатать указанный столбец разделенных символом ','

Вы можете изменить номер столбца, добавить / удалить $ NUM для получения разных столбцов.

В сочетании с sort вы получите уникальные строки :

awk -F',' '{print $1, $4}' file | sort -u

Флаг -u удаляет повторяющиеся элементы с выхода.

1
ответ дан 24 July 2018 в 20:06

Вы можете сделать это, объединив значения столбца в хэш-ключ, например. при условии, что ваш вход отсортирован, это однопроходное решение работает для столбца 1-3:

awk '!h[$1,$2,$3]++ { NF--; print }' FS=, OFS=, data.csv

Выход:

Col1,Col2,Col3
A,10,50
A,10,05
B,20,30
B,20,03
C,30,100
C,30,111
C,40,111
C,30,123

Для столбцов 1 и 4 выполните что-то подобное :

awk '!h[$1,$4]++ { print $1, $4 }' FS=, OFS=, data.csv

Выход:

Col1,Col4
A,2017
B,2017
C,2017
C,2016
C,2015
2
ответ дан 22 May 2018 в 22:29

Python

#!/usr/bin/env python

import sys

filename = sys.argv[1]
col_nums = sys.argv[2:]
if not col_nums:
    sys.exit()

rows_unique = []
for row in open(filename).read().splitlines():
    cells = row.split(',')
    # Select cells in row based on given column numbers.
    cells_selected = [cells[int(col_num)] for col_num in col_nums]
    row_selected = ','.join(cells_selected)
    if row_selected not in rows_unique:
        print(row_selected)
        rows_unique += [ row_selected ]

Сохранить как исполняемый скрипт, затем вызвать (обратите внимание, что столбцы нулевые индексы):

$ get_unique_rows_per_column.py file 0 2
Col1,Col3
A,50
A,05
B,30
B,03
C,100
C,111
C,123
0
ответ дан 22 May 2018 в 22:29

Вы можете сделать это, объединив значения столбца в хэш-ключ, например. при условии, что ваш вход отсортирован, это однопроходное решение работает для столбца 1-3:

awk '!h[$1,$2,$3]++ { NF--; print }' FS=, OFS=, data.csv

Выход:

Col1,Col2,Col3 A,10,50 A,10,05 B,20,30 B,20,03 C,30,100 C,30,111 C,40,111 C,30,123

Для столбцов 1 и 4 выполните что-то подобное :

awk '!h[$1,$4]++ { print $1, $4 }' FS=, OFS=, data.csv

Выход:

Col1,Col4 A,2017 B,2017 C,2017 C,2016 C,2015
2
ответ дан 18 July 2018 в 13:04

Python

#!/usr/bin/env python import sys filename = sys.argv[1] col_nums = sys.argv[2:] if not col_nums: sys.exit() rows_unique = [] for row in open(filename).read().splitlines(): cells = row.split(',') # Select cells in row based on given column numbers. cells_selected = [cells[int(col_num)] for col_num in col_nums] row_selected = ','.join(cells_selected) if row_selected not in rows_unique: print(row_selected) rows_unique += [ row_selected ]

Сохранить как исполняемый скрипт, затем вызвать (обратите внимание, что столбцы нулевые индексы):

$ get_unique_rows_per_column.py file 0 2 Col1,Col3 A,50 A,05 B,30 B,03 C,100 C,111 C,123
0
ответ дан 18 July 2018 в 13:04

Вы можете сделать это, объединив значения столбца в хэш-ключ, например. при условии, что ваш вход отсортирован, это однопроходное решение работает для столбца 1-3:

awk '!h[$1,$2,$3]++ { NF--; print }' FS=, OFS=, data.csv

Выход:

Col1,Col2,Col3 A,10,50 A,10,05 B,20,30 B,20,03 C,30,100 C,30,111 C,40,111 C,30,123

Для столбцов 1 и 4 выполните что-то подобное :

awk '!h[$1,$4]++ { print $1, $4 }' FS=, OFS=, data.csv

Выход:

Col1,Col4 A,2017 B,2017 C,2017 C,2016 C,2015
2
ответ дан 24 July 2018 в 20:06

Python

#!/usr/bin/env python import sys filename = sys.argv[1] col_nums = sys.argv[2:] if not col_nums: sys.exit() rows_unique = [] for row in open(filename).read().splitlines(): cells = row.split(',') # Select cells in row based on given column numbers. cells_selected = [cells[int(col_num)] for col_num in col_nums] row_selected = ','.join(cells_selected) if row_selected not in rows_unique: print(row_selected) rows_unique += [ row_selected ]

Сохранить как исполняемый скрипт, затем вызвать (обратите внимание, что столбцы нулевые индексы):

$ get_unique_rows_per_column.py file 0 2 Col1,Col3 A,50 A,05 B,30 B,03 C,100 C,111 C,123
0
ответ дан 24 July 2018 в 20:06

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

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