이건 내 파일이야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
단어 앞에 문자가 아닌 문자(예: 문자열) 와 일치한다고 삽입 [^|]*
하고 단어 끝에 있는 문자를 제거했습니다(또는 로 바꿀 수 있음).|
french
dutch;
;
;
[;|]