sed
나는 내 Unix(Solaris)에서 이것이 작동하지 않는 이유를 모르기 때문에 특정 열 찾기 및 바꾸기를 사용하는 것을 좋아하며 awk
gsub()
이것이 바로 내가 사용하고 싶은 것입니다 sed
.
견본:
122|abc|ds,we||wrqg
145|dw|ett,335||nxd
166|rotl|qqqp,eoepepe||ge
776|gge|022||pp
039|pot|011a||lot
세 번째 열에서는 파이프( ) ,
의 쉼표( )를 바꾸고 싶습니다 .|
을(를 ) 사용하려고 하면 gsub()
다음 오류가 발생합니다.
awk '{gsub(",","|",$3)}1' in.file > out.file
awk: syntax error near line 1
awk: illegal statement near line 1
awk: syntax error near line 1
awk: bailing out near line 1
또한 이를 내 데이터베이스(Oracle)로 가져옵니다. ,
데이터를 로 바꾸면 변경된 |
데이터 레코드가 동일한 필드에 존재하지 않습니다. 어떻게 하나요?
출력은 다음과 같습니다.
122|abc|ds|we|wrqg
145|dw|ett|335|nxd
166|rotl|qqqp|eoepepe|ge
776|gge|022||pp
039|pot|011a||lot
누구든지 이건 정말 필요해요.
답변1
Solaris /usr/bin/awk
의 다양한 기능에 대한 지원은 심각하게 제한됩니다. 특히 이 gsub()
기능은 구현되지 않았습니다. 이에 대한 설명은 다음과 같습니다.awk
Solaris 설명서.
/usr/xpg4/bin/awk
이를 위해서는 (또는 nawk
"new awk
")를 사용해야 합니다 .
또한 코드는 필드 구분 기호를 지정하지 않으므로 awk
실수 $3
로 공백으로 구분된 세 번째 필드를 생성할 만큼 데이터에 공백이 충분하지 않은 한 아무 것도 포함되지 않습니다. 마찬가지로 출력 필드 구분 기호를 지정하지 않으므로 수정된 행의 필드는 공백으로 구분됩니다.
대신에:
/usr/xpg4/bin/awk -F '|' 'BEGIN { OFS=FS } { gsub(",", "|", $3); print }' file
이를 Solaris에서 항상 기본값으로 만들려면 쉘의 시작 파일에서 이를 /usr/xpg4/bin/awk
사용하십시오 .awk
PATH="$(/usr/xpg4/bin/getconf PATH):$PATH"