我有以下脚本。它正确返回文本文件中整数的第一个实例
#!/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