如何在功能中索引输出

时间:2018-01-22 04:36:06

标签: arrays linux bash

我尝试过的是

read -p "Enter City In Australia: " city

function getaa {
    curl -s http://localhost:8080/api/examples-services/postcode/$city/ | 
    json_pp | grep -E '"' | cut -d \  -f7-30 | cut -d: -f1 |  tr -d '"' |
    sed '1d'

}

getaa

#read -p "Enter City In Zip :" sub
#curl -s http://localhost:8080/api/examples-services/postcode/$city/ | json_pp | grep -E '"' | cut -d \  -f7-30 | cut -d: -f2 | tr -d '",,,' | sed '1d' | sed -n ${sub}p

在我进入一个城市后,我想输出他们的邮政编码

我目前的输出是:

Perth 
Perthville 
Perth Gpo 
North Perth 
Perth East 

我的预期输出是:

1.Perth 
2.Perthville 
3.Perth Gpo 
4.North Perth 
5.Perth East 

2 个答案:

答案 0 :(得分:0)

如果您只想在每行的开头添加行号,请通过以下方式输出输出:

include_path

如果要格式化行号,sed可以轻松完成此操作

答案 1 :(得分:0)

如果curl -s http://localhost:8080/api/examples-services/postcode/$city/的输出为:

{
    "result": "OK",
    "message": {
        "East Perth": "WA 6892 (PO Boxes 1-827 & 6002-6892)",
        "North Perth": "WA 6906 (PO Boxes)",
        "Perth": "WA 6848 (GPO Boxes 9000-10000)",
        "Perth Airport": "WA 6105",
        "Perth Bc": "WA 6849 (PO Boxes 8001-8506)",
        "Perth East St Georges Tce": "WA 6832 (PO Boxes 3001-3540)",
        "Perth Gpo": "WA 6000",
        "Perth St Georges Tce": "WA 6831 (PO Boxes 5000-5500)",
        "Perthville": "NSW 2795",
        "South Perth": "WA 6951 (PO Boxes)",
        "South Perth Angelo St": "WA 6151 (PO Boxes)"
    }
 }

你在DavidC.Rankin的评论中发布的那个(并且截断的json被转换为有效的json,并且为了更好的可见性而在这里打印得很漂亮)。

在您的bash功能中,您使用json_pp只是为了从json请求中打印出curl。因此我省略了它。 如果您的json很简单,那么followign awk one-liner可以解决您的问题:

awk -F":" 'BEGIN { RS = "{|}|}}|," } NR > 3 { gsub(/"/, "", $0); print NR-3"."$1 }' message.json

read -p "Enter City In Australia: " city
curl -s http://localhost:8080/api/examples-services/postcode/$city/ | awk -F":" 'BEGIN { RS = "{|}|}}|," } NR > 3 { gsub(/"/, "", $0); print NR-3"."$1 }'

输出:

1.East Perth
2.North Perth
3.Perth
4.Perth Airport
5.Perth Bc
6.Perth East St Georges Tce
7.Perth Gpo
8.Perth St Georges Tce
9.Perthville
10.South Perth
11.South Perth Angelo St

在awk中,您可以将默认(newline character)记录分隔符(RS)更改为任何正则表达式。我们在执行开始时,在处理任何输入之前执行此操作。我们还将字段分隔符更改为冒号(:),请注意-F":"选项。基于简单的示例输入和提供的正则表达式,我们需要在3rd lineNR > 3)之后提取记录。 gsub函数会从每条记录中删除双引号("),然后打印出行号,1st field$1)以句点({{1}分隔因为它发布在您的预期输出中。行号是内置变量.的记录数量的变化值,以及我们处理的数量。