구문 분석 후 다른 열의 내용을 잃지 않고 특정 열이나 데이터를 구문 분석하는 방법은 무엇입니까?

구문 분석 후 다른 열의 내용을 잃지 않고 특정 열이나 데이터를 구문 분석하는 방법은 무엇입니까?

원래 질문 및 편집된 텍스트: 이 예에서는 "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' < 입력

관련 정보