다음 스크립트가 있습니다. 텍스트 파일에서 정수의 첫 번째 인스턴스를 올바르게 반환합니다.
#!/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