원래 질문 및 편집된 텍스트: 이 예에서는 "225" 값을 grep하기 위해 다음과 같은 출력이 있습니다. 값은 동적이므로 입력에 따라 변경될 수 있습니다." 그러나 전체 행의 내용을 잃지 않고 열 4의 일치 패턴만을 기반으로 값 225를 사용하여 전체 행을 가져오고 싶습니다.
Input:
10.20.223.10|2000-H1|1/1/2|DeviceX_4021|LG
10.20.223.10|2000-H1|1/1/3|Undiscoverable|Unkwn
10.20.225.10|2000-H1|1/1/5|DeviceZ_2050|LG
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore
Desired Output
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore
The following output its not desired:
10.20.225.10|2000-H1|1/1/5|DeviceZ_2050|LG
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore
awk와 grep을 많이 시도했지만 성공하지 못했습니다. 열 1, 행 3의 값은 225이므로 해당 출력이 필요하지 않습니다. "225"와 일치하는 열 4의 모든 항목을 원합니다. 이제 파일은 공백 없이 파이프로 구분됩니다.
답변1
사용 awk
:
awk -F'|' '$4 ~ /[^0-9]225[^0-9]/' file
이는 225
네 번째 필드에서 일치하고 일치하는 값(예: 1225
또는 2256
) 앞이나 뒤에 숫자가 없는 레코드를 인쇄합니다.
답변2
귀하의 데이터는 awk 형식에 적합한 것 같습니다.
$ awk '$8 == "225)"' INPUT
10.20.225.207 Device #1 1/1/23 Brand #2 (MODEL: 225) LG
10.20.209.252 Device #2 1/1/36 Brand #2 (MODEL: 225) LG
awk는 기본적으로 열을 공백으로 구분하기 때문에 열 8을 사용합니다.
답변3
이것이 당신에게 도움이 되기를 바랍니다:
grep 'MODEL: 225)' input-file
값 225
앞에는 항상 가 붙는 것으로 가정합니다 MODEL:
.
답변4
Perl과 sed를 사용하여 솔루션을 찾았습니다. 이를 달성하기 위해 awk를 사용할 수 있다면 좋을 것입니다.
솔루션 A Dave Cross에게 감사드립니다.
- perl -aF'|' -ne '$F[3] =~ 225 및 인쇄' < 입력
솔루션 B John Bollinger에게 감사드립니다.
- sed -n '/^([^|]*|){3}[^|]*225/p' < 입력