![구문 분석 후 다른 열의 내용을 잃지 않고 특정 열이나 데이터를 구문 분석하는 방법은 무엇입니까?](https://linux55.com/image/194144/%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%20%ED%9B%84%20%EB%8B%A4%EB%A5%B8%20%EC%97%B4%EC%9D%98%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EC%9E%83%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%ED%8A%B9%EC%A0%95%20%EC%97%B4%EC%9D%B4%EB%82%98%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
원래 질문 및 편집된 텍스트: 이 예에서는 "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' < 입력