awk에서 줄 바꿈을 억제하는 방법
Dec 04 2020
awk
아래 스크립트를 작성 하는 동안 원하지 않는 많은를 생성 LF
합니다. LF
이 스크립트에서 출력을 억제 (제어)하는 방법이 궁금합니다 . 친절한 조언에 미리 감사드립니다.
awk '
BEGIN{
FS=OFS=","
}
{
nf=NF
s=0 # initialization
if($1==3){print "1,"; s+=50}else{print "0,"} if($2==1){print "1,"; s+=50}else{print "0,"}
print s
print ","
}END{}' file
파일 (파일)의 내용은 다음과 같습니다.
3,1
3,2
이 경우 출력은 다음과 같습니다.
1,
1,
100
,
1,
0,
50
,
그것은 매우 서투른 것입니다. 내 원하는 출력은 다음과 같습니다.
1,1,100
1,0,50
답변
3 AkshayHegde Dec 04 2020 at 13:00
$ cat input 3,1 3,2 $ awk 'BEGIN{FS=OFS=","}{c1=c2=sum=0;}$1==3{c1=1;sum+=50}$2==1{c2=1;sum+=50}{print c1,c2,sum}' input
1,1,100
1,0,50
가독성 향상 :
awk 'BEGIN{
FS=OFS=","
}
{
c1=c2=sum=0; # reset variables
}
$1==3{ # if col1 equal to 3 then c1=1; sum+=50 } $2==1{ # if col2 equal to 1 then
c2=1;
sum+=50
}
{
print c1,c2,sum # print variables
}' input
3 RavinderSingh13 Dec 04 2020 at 12:55
여기에서 OP의 시도를 수정하여 다음을 시도해 주시겠습니까? GNU에서 수정 및 테스트되었습니다 awk
.
awk '
BEGIN{
FS=OFS=","
}
{
s=0
if($1==3){s+=50;$1="1"} else{$1="0"} if($2==1){s+=50;$1="1"} else{$2="0"}
print $0,s
}' Input_file
OP의 시도 수정 :
nf
필요하지 않은 변수를 제거 했습니다.- 조건이 충족되면 출력 할 필요가 없기 때문에 출력에 문제가 발생하는 이유가 아니라 필드 (예 : 1st 및 2nd 필드)에 값을 저장하고 마지막에 변수로 줄을 인쇄 할 수 있습니다.
설명 : 위에 대한 자세한 설명을 추가합니다.
awk ' ##Starting awk program from here.
BEGIN{ ##Starting BEGIN section of this program from here.
FS=OFS="," ##Setting FS and OFS as comma here.
}
{
s=0 ##Setting s as 0 here.
if($1==3){s+=50;$1="1"} else{$1="0"} ##Checking if 1st field is 3 then add 50 to s and set 1 to $1 else keep $1 as 0 here.
if($2==1){s+=50;$1="1"} else{$2="0"} ##Checking if 2nd field is 3 then add 50 to s and set 1 to $2 else keep $2 as 0 here. print $0,s ##Printing line and value of s here.
}' Input_file ##mentioning Input_file name here.
Daweo Dec 04 2020 at 16:19
로 설정 하여 AWK
각각 뒤에 개행 문자를 넣지 말라고 말할 수 있지만 필요한 곳에 개행 문자를 직접 넣어야합니다. 코드는 다음과 같이 재 작업 될 수 있습니다.print
ORS
""
awk '
BEGIN{
ORS="";FS=OFS=","
}
{
nf=NF
s=0 # initialization
if($1==3){print "1,"; s+=50}else{print "0,"} if($2==1){print "1,"; s+=50}else{print "0,"}
print s
print "\n"
}END{}' file
그런 다음 file
콘텐츠가
3,1
3,2
다음과 같이 출력됩니다.
1,1,100
1,0,50
(gawk 4.2.1에서 테스트 됨)