awk를 사용하여 $0을 인쇄할 때 필드 구분 기호를 유지하는 방법 [중복]

awk를 사용하여 $0을 인쇄할 때 필드 구분 기호를 유지하는 방법 [중복]

파일의 한 열을 수정한 후 결과를 인쇄해 봅니다.

awk -F"|" '{ if(NR!=1){$5 = $5+0.1} print $0}' myfile

내가 원하는 대로 작동하지만 인쇄할 때 첫 번째 행만 필드 구분 기호를 유지합니다. (수정하지 않습니다).

print $1"|"$2"|"$3"|"$4"|"$5"|"...그렇다면 $0을 사용하지 않고 사용할 수 있는 솔루션이 있나요 ? (예: 열 수를 모르는 경우)

나는 내 문제를 쉽게 해결할 수 있다고 믿지만 sed지금은 배우려고 노력하고 있습니다.awk

답변1

@Sukminder는 이미 간단한 답변을 제공했습니다. 예제 코드(예: 코드 검토)에 대한 몇 가지 스타일 포인트와 유용한 구문이 있습니다. 이것은 주석으로 시작했지만 점점 길어졌습니다.

OFS앞에서 설명한 대로 출력 필드 구분 기호입니다.

$0-의 기본 매개변수이므로 print명시적으로 지정할 필요가 없습니다. 또 다른 스타일 포인트: awk내장된 조건부 블록과 같은 소위 "패턴"이 있습니다. 따라서 다음을 사용할 수도 있습니다.

awk -F'|' 'BEGIN {OFS = FS} NR != 1 {$5 += 0.1} {print}' myfile

답변2

설정할 수 있습니다출력 필드 구분 기호, OFS.

'BEGIN { OFS = "|" } ...'

또는:

'BEGIN { OFS = FS } ...'

이것은<스페이스>기본적으로.

관련 정보