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

단어 앞의 문자 가 아닌 부분 (예: 문자열 ) [^|]*과 일치하는 를 삽입하고 단어 끝 부분 의 를 제거했습니다 (또는 by 로 대체할 수도 있음 ).|frenchdutch;;;[;|]

관련 정보