이 질문의 계속:명령 출력의 첫 번째 열을 구문 분석하고 해당하는 두 번째 열 값을 얻습니다. 아래와 같이 테이블 형식으로 문자열을 출력하는 명령이 있다고 가정합니다. 내가 찾고 있는 "패턴"에 공백이 포함되어 있으면 어떻게 되나요? 예를 들어, 테이블이 다음과 같은 경우:
First Characteristic: b
Second Characteristic: 89.4
Version: 58.93
Name of Device: myDevice
Name of Device Load: myDevice-load-123abc
위 표에서 "장치 로드 이름" 옆의 값을 얻으려면 어떻게 해야 합니까?
명확히 하자면, 내가 찾고 있는 값이 "장치 로드 이름" 옆에 있다는 것을 알고 있습니다. 출력의 5번째 줄에 있는지도 모르고 해당 값이 어떻게 보일지도 모릅니다(예를 들어 "-load-"와 같은 패턴 일치를 시도할 수 없습니다).
답변1
이것은 어떻습니까?
grep "Name of Device Load:" your_file.txt| cut -d ":" -f 2 | tr -d " "
이렇게 하면 관심 있는 행만 유지하고 이를 두 개의 필드로 분할한 다음( :
각 행이 한 번만 발생하는 경우에만 작동) 공백을 제거합니다.
답변2
나는 이것을 사용할 것이다 perl
.
이 같은:
#!/usr/bin/env perl
use strict;
use warnings;
local $/;
my %lookup = ( <> =~ m/^(.*): (\S+)$/gm );
print $lookup{'Name of Device Load'},"\n";
우리는 또는 파일 이름에서 데이터를 "읽습니다" STDIN
. ( myscript.pl filename
그게 전부입니다 <>
. 약간 마술적입니다.)
위의 정규식 캡처 그룹을 사용하여 이를 "파싱"하고 한 번에 두 요소를 캡처하므로(그리고 플래그로 인해 여러 줄에 걸쳐 캡처를 반복 gm
) 키-값 쌍의 해시 테이블을 만듭니다.
그런 다음 명명된 키와 관련된 값을 추출하여 Name of Device Load
인쇄하므로 순서는 중요하지 않습니다.
답변3
나는 그것을 달성하기 위해 awk -F":"를 사용할 것입니다. 따라서 두 번째 열을 원한다면 이렇게 할 수 있습니다.
awk -F":" 'FNR == 5 {print $2}'
이는 임시 해결책이지만 이 경우에는 작동합니다.
알고 있고 원하는 패턴이 "장치 로드 이름"인 경우 다음을 수행할 수 있습니다.
cat file.txt | grep "Name of Device Load" | awk -F":" '{print $2}'
편집: 다섯 번째 및 두 번째 행과 검색 패턴에 대한 옵션이 추가되었습니다. 기본적으로 모든 것은 이 아이디어를 기반으로 합니다.
https://stackoverflow.com/questions/1506521/select-row-and-element-in-awk
답변4
다음 스크립트를 사용하면 두 번째 값을 얻을 수 있습니다
awk -F: /장치 로드 이름:/ { $2 인쇄} file1