텍스트 파일에서 고유한 정수 배열을 검색합니다.

텍스트 파일에서 고유한 정수 배열을 검색합니다.

다음 스크립트가 있습니다. 텍스트 파일에서 정수의 첫 번째 인스턴스를 올바르게 반환합니다.

#!/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를 키로 사용하십시오.

답변2

를 사용하여 이 작업을 수행할 수 있지만 다음을 awk사용 하면 솔루션이 uniq더 간단할 수 있습니다 .

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

관련 정보