recupera a matriz de inteiros do arquivo de texto sem duplicatas

0

Eu tenho o seguinte script. Ele retorna corretamente a primeira instância de um inteiro de um arquivo de texto

#!/bin/bash

#create file list
mtp-files > file_list.txt
echo "Hello World"

#retrieve File ID from file list
id=$(awk -F'[ \t]*:[ \t]*' '$1 == "File ID"{print $2; exit}' file_list.txt)

echo "$id"

Mas preciso de uma matriz contendo TODOS os valores inteiros do ID do arquivo sem duplicatas. Por exemplo, se o seguinte é meu file_list.txt, meu script deve retornar uma matriz contendo 8,9,10

libmtp version: 1.1.10

mtp-files: Successfully connected
Android device detected, assigning default bug flags
Listing File Information on Device with name: LGE 360 CAM MTP Device
File ID: 8
   Filename: 20161212_095355.jpg
   File size 625762 (0x0000000000098C62) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 9
   Filename: 20161212_095416.jpg
   File size 602264 (0x0000000000093098) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 10
   Filename: 20161212_095520.jpg
   File size 642770 (0x000000000009CED2) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 8
   Filename: 20161212_095355.jpg
   File size 625762 (0x0000000000098C62) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 9
   Filename: 20161212_095416.jpg
   File size 602264 (0x0000000000093098) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 10
   Filename: 20161212_095520.jpg
   File size 642770 (0x000000000009CED2) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 8
   Filename: 20161212_095355.jpg
   File size 625762 (0x0000000000098C62) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 9
   Filename: 20161212_095416.jpg
   File size 602264 (0x0000000000093098) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 10
   Filename: 20161212_095520.jpg
   File size 642770 (0x000000000009CED2) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
OK.
    
por Bachalo 12.12.2016 / 16:21

2 respostas

1

O que o thrig disse: alguma combinação de ferramentas de shell existentes deve fazer o que você quer. Algo parecido com isto:

% grep '^File ID:' file_list.txt | grep -o '[0-9]\+' | sort -n | uniq
8
9
10

Note que uniq só olha para a linha anterior, então o sort é necessário.

Se você precisar fazer algo mais sofisticado do que o apropriado para um shell one-liner, escolha um idioma que suporte a manipulação de pares de valores-chave e use a ID do arquivo como sua chave.

    
por 12.12.2016 / 16:54
0

Você pode fazer isso com awk , embora uma solução usando uniq possa ser mais simples:

awk '/^File ID/ && !a[$3] { a[$3] = 1; print $3 }' file_list.txt
    
por 13.12.2016 / 10:17

Tags