从文本文件中检索不重复的整数数组

从文本文件中检索不重复的整数数组

我有以下脚本。它正确返回文本文件中整数的第一个实例

#!/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"

但我需要一个包含所有文件 ID 整数值且不重复的数组。例如,如果以下是我的 file_list.txt,我的脚本应该返回一个包含 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.

答案1

thrig 所说的:现有 shell 工具的某种组合应该可以满足您的需求。像这样的东西:

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

注意uniq仅查看上一行,因此sort是必需的。

如果您需要做一些比 shell 单行代码更复杂的事情,请选择一种支持操作键值对的语言并使用文件 ID 作为键。

答案2

您可以使用 来完成此操作awk,尽管使用的解决方案uniq可能更简单:

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

相关内容