두 번째 열부터 시작하는 문자열을 검색하는 방법

두 번째 열부터 시작하는 문자열을 검색하는 방법

쉼표로 구분된 문자열이 포함된 파일이 있습니다. 문자열에는 점이 포함될 수 있습니다(예: 영숫자 문자뿐만 아니라). 이것은 예입니다:

site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
siteLevel1.2,Levelv2
Level1.2,Levelv2

사이트 이름을 검색해야 합니다. 사이트 이름에 대한 특정 형식이 없다는 점에 유의하십시오. 즉, 사이트 이름은 항상 .com으로 끝나지 않으므로 첫 번째 열의 모양을 고려해서는 안 됩니다.

나에게 필요한 사이트는오직특정 문자열을 포함합니다. 이 예에서는Level1.2 독점적으로(레벨1.1도 없고 레벨1.0도 없고 레벨3도 없음)이전이든 이후든). 그런 다음 조건과 일치하는 새 파일에 결과를 인쇄합니다(레벨 1.2만 포함). 따라서 검색 키워드는 두 번째 열부터 시작됩니다. (사이트 이름에서 일치하는 패턴을 찾는 검색 결과를 원하지 않습니다.)

따라서 Level1.2를 검색하는 경우 새 파일에는 다음이 포함되어야 합니다.

site1.com,Level1.2
site3.com,Level1.2

하지만 내 명령 결과는 다음과 같습니다.

site1.com,Level1.2
site3.com,Level1.2
siteLevel1.2,Levelv2
Level1.2,Levelv2

이름에 Level1.2가 포함된 사이트가 있는 경우 첫 번째 열에는 관심이 없으므로 계산되지 않습니다.

나는 이 명령을 시도했고 그것은 나에게 효과적이었습니다. 유일한 것은 첫 번째 열에서 검색 문자열의 발생을 무시하기 위해 검색이 필요하다는 것입니다.

awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt

답변1

다음을 시도해 볼 수 있습니다 awk.

awk -F, '$2=="Level1.2" && NF==2' myfile.txt

입력 구분 기호는 으로 설정됩니다 ,. 이 명령은 일치하는 문자열이 있는 두 번째 필드와 함께 2개의 필드가 포함된 행을 인쇄합니다.

답변2

다음은 작동합니다:

grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'

이렇게 하면 첫 번째 필드와 뒤따르는 쉼표를 건너뛴 다음 Level1.2; 그런 다음 후속 항목이 있는 모든 레코드를 무시하여 결과가 필터링됩니다 Level( Level첫 번째 필드의 항목에는 앞에 쉼표가 없습니다).

Level1.2문자열 이 포함되어 있지 않다면 다른 텍스트를 에 추가할 수 있다고 가정했습니다 Level. 이것이 사실이 아닌 경우 더 간단한 방법을 사용할 수 있습니다.

grep '^[^,]*,Level1\.2$' myfile.txt

관련 정보