XYZ 데이터가 포함된 .csv 열만 유지하시겠습니까?

XYZ 데이터가 포함된 .csv 열만 유지하시겠습니까?

단어만 포함된 .csv 데이터 행을 유지 dog하고 cat두 번째 열에서만 확인할 수 있습니다. "dog"라는 단어가 다른 열에는 나타나지만 두 번째 열에는 나타나지 않으면 무시해야 합니다.

예를 들어 다음과 같은 경우가 있습니다.

email1.com dog
email2dog.com steve
email3.com cat

예상 출력:

email1.com dog
email3.com cat

긴 단어 목록을 유지해야 할 수도 있으므로 가능하면 다른 파일에서 해당 단어를 로드하세요.

답변1

그리고 sed:

$ sed -n -e 's/dog$/&/p' -e 's/cat$/&/p' file
email1.com dog
email3.com cat

또는 다음을 사용할 수 있습니다 awk.

awk '$2~/^dog|cat$/' file

답변2

여러 가지 방법:

  1. dogor가 cat항상 줄의 마지막 단어인 경우 :

    awk '/(dog|cat)$/' file
    grep -E '(dog|cat)$' file
    sed -n '/\(dog\|cat\)$/p' file
    perl -ne 'print if /(dog|cat)$/' file
    
  2. dog또는 cat두 번째 어디에나 나타날 수 있는 경우공백으로 구분대지:

    awk '$2~/dog|cat/' file
    grep -E '^\S+\s+\S*(dog|cat)\S*\s*' file
    perl -ane 'print if $F[1]=~/dog|cat/' file
    sed -nr '/^\S+\s+\S*(dog|cat)\S*\s*/p' file
    sed -n '/^\S\+\s\+\S*\(dog\|cat\)\S*\s*/p' file
    
  3. 파일에서 검색 패턴을 읽으려면 다음을 수행할 수 있습니다.

    awk '{if(NR==FNR){a[$0]++; next}for(p in a){if($2~p){print}}}' patterns  file
    

답변3

{   sed 's/[]$^&\./*[]/\\&/g;s/$/$/'|
    grep -f- ./greppedfile
}   <words

다수의 일치 패턴을 처리하는 상황을 처리할 수 있습니다.words각 줄에는 패턴이 포함되어 있습니다. 가능한 정규 표현식을 조심스럽게 이스케이프 처리합니다.메타 문자그러면 결과 패턴이 줄 끝에 고정되므로 그 안의 모든 문자는words문자 그대로 일치 grep하며 패턴은 다음과 같은 경우에만 일치합니다.단어줄 끝에서 발생합니다. 이것이 내가 원하는 것을 이해했다고 생각하는 것입니다.

일반적으로 메타문자 이스케이프 가 없는 고정 문자열 모드를 grep사용할 수 있기 때문에 이와 같은 메타문자 이스케이프가 없습니다 . -F그러나 이는 또한 패턴을 고정하기 위해 메타 문자를 사용할 수 없으므로 $얻은 것을 사용한다는 의미이기도 합니다.

답변4

grepPCRE와 함께 사용:

$ grep -P '^[^ ]+\s+dog|cat(?=\s|$)' file.txt 
email1.com dog
email3.com cat

dogcat그러면 행의 두 번째 열에 나타나는 행만 인쇄됩니다 .

관련 정보