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
ファイル(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
不要な変数を削除しました。- 条件が満たされるとすぐに印刷する必要はありません。そのため、出力に問題が発生します。フィールド(たとえば、> 1番目と2番目のフィールド)に値を保存し、最後に変数を使用して行を印刷できます。
説明:上記の詳細な説明を追加します。
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でテスト済み)