次のスクリプトがあります。テキストファイル内の整数の最初のインスタンスを正しく返します。
#!/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の言葉:既存のシェルツールのいくつかの組み合わせがあなたの要件を満たす必要があります。このような:
% grep '^File ID:' file_list.txt | grep -o '[0-9]\+' | sort -n | uniq
8
9
10
uniq
前の行のみが表示されるため、これは必須sort
です。
シェルワンライナーよりも複雑な作業を行う必要がある場合は、キーと値のペア操作をサポートする言語を選択し、ファイルIDをキーとして使用してください。