gpt4 book ai didi

bash - awk blues.. 怎么了?

转载 作者:行者123 更新时间:2023-11-29 09:48:40 27 4
gpt4 key购买 nike

我必须从文件“main.csv”中读取并打印如下输出:

Set 4,1095,Set 1 or 4
Set 2,18277,Set 2 or 3
Set 1 or 4,Set 4,944
Set 2,1373,Set 2 or 3
Set 4,83,Set 1 or 4
Set 2,14356,Set 2 or 3
Set 2,14800,Set 2 or 3

我在下面尝试了各自的输出:

awk 'BEGIN {FS=","}{OFS=","}{print $12,$15}' main.csv
Set 4,1095
Set 2,18277
Set 4,944
Set 2,1373
Set 4,83

awk 'BEGIN {FS=","}{OFS=","}{if($12 == "Set 1" || $12 == "Set 4"){print "Set 1 or 4",$12,$15}else{print "Set 2 or 3",$12,$15}}' main.csv
Set 1 or 4,Set 4,1095
Set 2 or 3,Set 2,18277
Set 1 or 4,Set 4,944
Set 2 or 3,Set 2,1373
Set 1 or 4,Set 4,83
Set 2 or 3,Set 2,14356
Set 2 or 3,Set 2,14800

awk 'BEGIN {FS=","}{OFS=","}{if($12 == "Set 1" || $12 == "Set 4"){print $12,$15,"Set 1 or 4"}else{print $12,$15,"Set 2 or 3"}}' main.csv
,Set 1 or 4
,Set 2 or 3
,Set 1 or 4
,Set 2 or 3
,Set 1 or 4
,Set 2 or 3
,Set 2 or 3

前 2 个“awk”运行良好,为什么第三个不能运行?

main.csv 每行有 15 个逗号分隔值,第 12 个值如下所示:

Set 1
Set 2
Set 3
Set 4

PS: 我在 Solaris 10 上使用 bash

我仍然对“awk”问题很感兴趣,下面是我注意到的……不确定为什么会这样(我在 Solaris 10 和 RHEL 5 上都遇到了这个问题)

awk -F, '{print "Var13->"$13,"\t","Var12->"$12,"\t","Var15 ->"$15}' < main.csv
Var13->0 Var12->Set 4 Var15 ->1095
Var13->1631 Var12->Set 2 Var15 ->18277
Var13->0 Var12->Set 4 Var15 ->944
Var13->2832 Var12->Set 2 Var15 ->1373
Var13->0 Var12->Set 4 Var15 ->83

awk -F, '{print "Var13 & Var15->"$13,"\t","Var12->"$12,"\t","Var15 ->"$15}' < main.csv
Var13 & Var15->0 Var12->Set 4 Var15 ->1095
Var13 & Var15->1631 Var12->Set 2 Var15 ->18277
Var13 & Var15->0 Var12->Set 4 Var15 ->944
Var13 & Var15->2832 Var12->Set 2 Var15 ->1373
Var13 & Var15->0 Var12->Set 4 Var15 ->83


awk -F, '{print "Var13 & Var15->"$13,$15"\t","Var12->"$12,"\t","Var15 ->"$15}' < main.csv
or
awk -F, '{print "Var13 & Var15->"$13,$15,"\t","Var12->"$12,"\t","Var15 ->"$15}' < main.csv
or
awk -F, '{print "Var13 & Var15->"$13,"\t",$15,"\t","Var12->"$12,"\t","Var15 ->"$15}' < main.csv

ar13 & Var12->Set 4 Var15 ->1095
ar13 & Var12->Set 2 27 Var15 ->18277
ar13 & Var12->Set 4 Var15 ->944
ar13 & Var12->Set 2 73 Var15 ->1373
ar13 & Var12->Set 4 Var15 ->83
ar13 & Var12->Set 2 56 Var15 ->14356

如您所见,最后 3 次运行已经吃掉了“Var13”输出中的字母并添加了一些垃圾信息。

最佳答案

不需要为此投票,我只是想粘贴一些格式化的代码。

您的程序越来越大,值得拥有自己的代码文件,可以在其中以文明的方式对其进行格式化并与其他版本进行比较。当我们这样做时,我们可以很容易地看到您在每个输入行上的操作中分配 OFS。没有造成伤害,但这显然是无意的,所以你输了 1337 points. 解决了这个问题,我们继续前进。

你无法区分一行并学到任何东西。 <强> Running diff(1) 格式良好的代码表明只有输出行发生了变化,因此这两个程序同样有效。您必须在不同条件下进行第三次运行。也许是不同的输入文件?

BEGIN  {
FS = ","
OFS = ","
}
{ if($12 == "Set 1" || $12 == "Set 4") {
print "Set 1 or 4",$12,$15
} else {
print "Set 2 or 3",$12,$15
}
}

BEGIN {
FS = ","
OFS = ","
}
{ if($12 == "Set 1" || $12 == "Set 4") {
print $12,$15,"Set 1 or 4"
} else {
print $12,$15,"Set 2 or 3"
}
}

关于bash - awk blues.. 怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com