OFS는 언제 바뀌나요?

OFS는 언제 바뀌나요?

OFS 값은 사용자 또는 사용자 스크립트에 의해 설정되지 않는 한 항상 공백으로 나타납니다. 입력에 탭 문자가 사용되는 경우에도:

$ printf 'one\ntwo\tthree\nfour' | awk '{NF=NF}1' | sed -n l
one$
two three$
four$

그러나 유사 변수(ORS)에 대해서는 다음과 같이 말하는 경우가 있습니다.귀하의 플랫폼에 합당한 가치를 유지할 수 있도록 ORS를 그대로 두십시오.. 일부 플랫폼에서는 기본 ORS가 \r\n.

OFS가 직면한 문제는 다음과 같습니다.

  • OFS는 플랫폼 간에 변경됩니까?
  • 공백이 아닌 OFS 구현이 있습니까?

편집자 코멘트: 제 질문으로 인해 혼란을 끼쳐드려 죄송합니다. 이제 명확해지기를 바랍니다.

아직 투표할 수 없습니다.

답변1

내가 (현재) 거기에 언급했듯이 ORS는 항상 기본값이지만 "\n"Windows에서는C 구현(이것은 awk 이외의 다른 많은 프로그램에서도 작동합니다.) ORS에서 생성되었거나 입력 시 RS와 일치하는지 여부에 관계없이 \n모든 문자에 대해 CR LF와 CR LF 사이를 변환합니다 .\n

비슷하게,예 OFS의 기본값은 항상 (1)개의 공백입니다.. FS의 기본값은 1공간이지만 특수 처리가 적용됩니다. FS가 1공간이면 둘 중 하나가 기본값입니다.또는명시적으로 설정하면 필드가 실제로 임의로 분할됩니다.빈 시퀀스(게시하는 경우 탭을 포함합니다). 다른 모든 단일 문자 FS는 리터럴 문자로 처리되고 모든 다중 문자 값은 정규식으로 처리됩니다.

따라서 단일 공백 ​​또는 정규 표현식의 경우 레코드는 필드마다 및/또는 레코드마다 다른 구분 기호로 분할될 수 있지만 Rebuild $0에서와 같이 NF 또는 필드에 할당하면 다시 작성된 행은 고정 값을 사용합니다. 모든 필드 사이의 OFS(둘 이상인 경우). 또한 print x,y,z여러 표현식을 사용하는 경우 (고정) OFS로 구분됩니다. 물론, OFS를 포함하거나 OFS로 구성된 문자열 표현식을 명시적으로 인쇄하거나 다른 방식으로 사용하는 경우 OFS 값을 얻게 됩니다.

표준 RS는 단일 문자 또는 빈 문자열로 설정되어 "단락" 모드를 유발할 수 있습니다. 여기서 레코드는 하나 이상의 빈 줄(연속 줄 바꿈)로 분할됩니다. 이 모드에서는 기본적으로 분할됩니다.필드일반적인 경우를 제외하고는 개행 문자를 사용합니다. 존재하다암소 비슷한 일종의 영양awk에서만 RS를 다중 문자 정규식으로 설정할 수 있으며 일치하는 결과는 RT에서 사용할 수 있습니다. 하단 요약 참조GNU 문서의 이 페이지.

관련 정보