awk 및 grep을 사용하여 파일의 모든 행을 테스트하고 일치하는 경우 다른 파일에 넣습니다.

awk 및 grep을 사용하여 파일의 모든 행을 테스트하고 일치하는 경우 다른 파일에 넣습니다.

이건 내 파일이야test.csv

bonjour|b|french;deutsch|french
hello|h|english;russian|french
gutentag|g|german;polish|french
ciao|i|italian|french

|에 의한 세 번째 분할이 프랑스어인지 테스트하고(프랑스어는 다른 분할에 있을 수 있으므로 세 번째만 가능) 이와 일치하는 모든 줄을 다른 파일에 저장하고 싶습니다.

예:

bonjour|b|french;deutsch|french

french;deutsch일치시키다

그것은 마치awk -F | '$3=="french"' file

답변1

awk -F '[|;]' '$3 == "french"' file >newfile

|이는 및 필드 구분 기호로 사용 ;하고 세 번째 필드와 string 에 대해 문자열 비교를 수행합니다 french. 문자열이 일치하면 해당 행이 출력됩니다. 모든 출력은 파일로 리디렉션됩니다 newfile.

사용하는 경우오직 |구분 기호로 세 번째 필드 시작 부분에 정규식을 사용하여 테스트해야 합니다.

awk -F '|' '$3 ~ /^french;/' file >newfile

french;이는 세 번째 필드의 시작 부분에서 문자열을 감지하고 일치하는 경우 줄을 출력합니다.

french세 번째 로 구분된 필드 |어디에 든 나타날 수 있는 경우 (예: dutch;french), 사용하려면 패턴을 약간 완화해야 할 수도 있습니다.

awk -F '|' '$3 ~ /french/' file >newfile

grep|일치시킬 구분된 필드를 정확히 지정하기가 어렵기 때문에 여기서 사용하는 것은 약간 어색합니다 .

grep '^\([[:alpha:]]\{1,\}|\)\{2\}french;' file >newfile

이는 알파벳 문자(문자)의 문자열, 그 뒤에 |문자 두 번, 문자열 과 일치합니다 french;.

확장된 정규식을 사용하십시오:

grep -E '^([[:alpha:]]+\|){2}french;' file >newfile

|이제 대체로 해석되는 것을 피하기 위해 이스케이프 가 필요합니다.

마찬가지로 세 번째 필드 내 어디에나 나타날 수 있는 경우 french표현식을 약간 완화해야 합니다.

grep '^\([[:alpha:]]\{1,\}|\)\{2\}[^|]*french' file >newfile

또는,

grep -E '^([[:alpha:]]+\|){2}[^|]*french' file >newfile

단어 앞에 문자가 아닌 문자(예: 문자열) 와 일치한다고 삽입 [^|]*하고 단어 끝에 있는 문자를 제거했습니다(또는 로 바꿀 수 있음).|frenchdutch;;;[;|]

관련 정보