Как извлечь уникальные значения из столбца #x с соответствующими значениями столбца # y?

У меня есть запятая ',' имя файла FS как csv с числом столбцов n. я нуждаюсь для извлечения уникального значения из colm. # 1 только с соответствующими значения в столбце № 10 . Итак, в основном столбец 10 - это дата, которая всегда уникален для столбца №1, несмотря на другие столбцы.

echo filename 


colm.#1 colm.#2 colm.#3 colm.#4 colm.#5 colm.#6 colm.#7 colm.#8 colm.#9 colm.#10    colm.#11
    a   231 412 30.84873962 3   1   1   2013    5/28/2013   6/6/2006    299
    c   12  41  66.80690765 3   1   1   2014    5/25/2014   4/4/2004    351
    d   35  6   25.91622925 3   1   2   2013    6/27/2013   3/3/2003    303
    d   352 55  33.91288757 3   1   2   2014    6/26/2014   3/3/2003    355
    a   86  3   30.58783722 3   1   3   2013    7/24/2013   6/6/2006    307
    c   15  3242    26.6435585  3   1   3   2014    7/24/2014   4/4/2004    359
    e   67  1   22.95526123 3   1   4   2013    8/21/2013   5/5/2005    311
    a   464 64  4.804824352 3   1   4   2014    8/20/2014   6/6/2006    363
    b   66  42  29.42435265 3   1   5   2014    9/18/2014   7/7/2007    367
    m   24  2   66.10663319 3   1   6   2014    10/13/2014  9/9/2009    371

Я пробовал следующую команду, но она предназначена только для столбца №1, и я не делаю этого. знать, как получить соответствующее значение столбца №10.

 cut -d',' -f1 filename |uniq

Ожидаемый результат:

a   6/6/2006
b   7/7/2007
c   4/4/2004
d   3/3/2003
e   5/5/2005
m   9/9/2009
0
12.12.2016, 23:09
3 ответа
awk '{if ( ! ( $1 in Peers)) { Peers[$1]=$1 " " $10; print Peers[$1]} }' YourFile

это принимает порядок, как он есть, если вам нужно упорядочить результат, сортировку в полке (ввод или вывод) или (с GNU awk)

awk '{if ( ! ( $1 in Peers)) Peers[$1]=$1 " " $10 } END{asort(Peers);for (Peer in Peers) print Peers[ Peer]}' YourFile
0
28.01.2020, 04:49

Если вы хотите напечатать несколько полей с вырезом:

cut -d (SELECT DELIMITER) -f 1,10

-f 1,10выбирает только указанные поля.

Если вы нацелены на определенную линию, вы можете :grep -w a filename | cut -d (SELECT DELIMITER) -f 1,10

В приведенном выше случае вы ищете точное совпадение для буквы «а». Это означает, что «яблоко» будет не очень, а «а» будет.

0
13.10.2020, 01:18
awk 'NR>1{if(!seen[$1,$10]++)print $1,$10}' filename| sort -k1 

выход

a 6/6/2006
b 7/7/2007
c 4/4/2004
d 3/3/2003
e 5/5/2005
m 9/9/2009
0
08.09.2021, 18:40

Теги

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