Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取awk数组中的索引值_Awk - Fatal编程技术网

如何获取awk数组中的索引值

如何获取awk数组中的索引值,awk,Awk,我有这些数据,其中$1、$2和$3、$4、$8来自不同的来源$1、$3相似,只是没有排序:- code :name : code: type <br/> 0555:GeoLocate:2754:GSM:MT:SMS:Charge:5:<br/> 930:topup:6463:GSM:MT:SMS:Charge:5:<br/> 234:ota:3744:GSM:MT:SMS:Charge:0:<br/> 2000:FA_ussd:744:G

我有这些数据,其中$1、$2和$3、$4、$8来自不同的来源$1、$3相似,只是没有排序:-

code :name :     code: type <br/>
0555:GeoLocate:2754:GSM:MT:SMS:Charge:5:<br/>
930:topup:6463:GSM:MT:SMS:Charge:5:<br/> 
234:ota:3744:GSM:MT:SMS:Charge:0:<br/>
2000:FA_ussd:744:GSM:MT:SMS:Charge:0:<br/>
1450:IMPT:5434:GSM:MT:SMS:Charge:0: <br/>
1450:IMPT:930:GSM:MT:SMS:Charge:0:<br/>
5551:adt:1450:GSM:MT:SMS:Charge:10:<br/>
但当我运行这个时

$ awk -f awkscript.awk sampleData
b[a[x]]的输出为空:
1450 GSM MT短信息收费10
930 GSM MT短信费用0

由于数组b中的IMPT与a中的x具有相同的索引,如何获取该数组b中IMPT的索引?

假设我理解正确(请参阅我对原始问题的评论),您可以尝试以下操作:

bash-3.2$ cat sample.data
0555:GeoLocate:2754:GSM:MT:SMS:Charge:5:<br/>
930:topup:6463:GSM:MT:SMS:Charge:5:<br/> 
234:ota:3744:GSM:MT:SMS:Charge:0:<br/>
2000:FA_ussd:744:GSM:MT:SMS:Charge:0:<br/>
1450:IMPT:5434:GSM:MT:SMS:Charge:0: <br/>
1450:IMPT:930:GSM:MT:SMS:Charge:0:<br/>
5551:adt:1450:GSM:MT:SMS:Charge:10:<br/>


bash-3.2$ awk -F: 'NR == FNR { a[$1] = $2; next } { print $3, a[$3]?a[$3]:"(not found)", $4, $5, $6, $7, $8 }' sample.data sample.data
2754 (not found) GSM MT SMS Charge 5
6463 (not found) GSM MT SMS Charge 5
3744 (not found) GSM MT SMS Charge 0
744 (not found) GSM MT SMS Charge 0
5434 (not found) GSM MT SMS Charge 0
930 topup GSM MT SMS Charge 0
1450 IMPT GSM MT SMS Charge 10

这看起来可能是一个很好的问题,但我担心人们可能会觉得他们必须努力工作,才能准确地理解你想要实现的目标。我是否正确理解,对于要打印的每行,
$3$4$5$6$7$8
,其中,
是与不同行的$1关联的$2,其中$1与正在打印的行的$3相同?(换句话说,第一个和第三个字段上的自联接)发布预期的输出。是的,确切地说,$1和$2来自不同的数据源,$3到$8来自另一个数据源。我希望得到3美元4美元5美元6美元…为什么我们关心字段的来源?这对你尝试做的事情有什么功能上的不同吗?嗨,这解决了我的问题!我用awk{if($2!=“(not”){print$0;}}}删除了“(not found)”。谢谢!太好了!我用一个替代方法编辑了答案,避免了在没有额外awk的情况下使用“not founds”。
bash-3.2$ cat sample.data
0555:GeoLocate:2754:GSM:MT:SMS:Charge:5:<br/>
930:topup:6463:GSM:MT:SMS:Charge:5:<br/> 
234:ota:3744:GSM:MT:SMS:Charge:0:<br/>
2000:FA_ussd:744:GSM:MT:SMS:Charge:0:<br/>
1450:IMPT:5434:GSM:MT:SMS:Charge:0: <br/>
1450:IMPT:930:GSM:MT:SMS:Charge:0:<br/>
5551:adt:1450:GSM:MT:SMS:Charge:10:<br/>


bash-3.2$ awk -F: 'NR == FNR { a[$1] = $2; next } { print $3, a[$3]?a[$3]:"(not found)", $4, $5, $6, $7, $8 }' sample.data sample.data
2754 (not found) GSM MT SMS Charge 5
6463 (not found) GSM MT SMS Charge 5
3744 (not found) GSM MT SMS Charge 0
744 (not found) GSM MT SMS Charge 0
5434 (not found) GSM MT SMS Charge 0
930 topup GSM MT SMS Charge 0
1450 IMPT GSM MT SMS Charge 10
bash-3.2$ awk -F: 'NR == FNR { a[$1] = $2; next } { if (a[$3]) print $3, a[$3], $4, $5, $6, $7, $8 }' sample.data sample.data
930 topup GSM MT SMS Charge 0
1450 IMPT GSM MT SMS Charge 10