小编Ini*_*ian的帖子

jq没有使用短划线和数字处理标签名称

我正在使用jq,但在我的json标签中使用" - "使jq无法编译.我无法逃避它使其成功.这里是命令

    curl -X GET -H "X-AppKey:foo" "foo/v2/_status" | jq '.component-status[]'
Run Code Online (Sandbox Code Playgroud)

我在jq的github上阅读了这篇文章https://github.com/stedolan/jq/issues/202,但我无法使其有效.

这是卷曲的输出

   {
  "status": "ok",
  "hostname": "0b0b495a46db",
  "component-status": [
   {
     "status-code": 200,
     "component": "Service1",
     "status": "OK"
   },
   {
     "status-code": 200,
     "component": "Service2",
     "status": "OK"
   }
  ]
 }
Run Code Online (Sandbox Code Playgroud)

任何的想法?

bash json jq

7
推荐指数
2
解决办法
2742
查看次数

使用 grep 仅打印上下文

使用grep,您可以打印与您的搜索查询匹配的行。添加一个-C选项将打印两行周围的上下文,如下所示:

> grep -C 2 'lorem'
some context
some other context
**lorem ipsum**
another line
yet another line
Run Code Online (Sandbox Code Playgroud)

同样,您可以使用grep -B 2grep -A 2分别打印前两行或后两行的匹配行,例如:

> grep -A 2 'lorem'
**lorem ipsum**
another line
yet another line
Run Code Online (Sandbox Code Playgroud)

是否可以跳过匹配的行并只打印上下文?具体来说,我只想打印匹配项上方 2 行的行,如下所示:

> <some magic command>
some context
Run Code Online (Sandbox Code Playgroud)

bash shell awk grep

7
推荐指数
1
解决办法
1431
查看次数

由kinesis引发的跨帐户lambda触发器

我试图通过帐户'A'中的Kinesis流在帐号'B'中触发lambda.这类似于此处描述的内容,除了示例使用S3而不是Kinesis.

为此,我正在尝试设置正确的权限,但遇到了困难.

首先我添加此权限:

  aws lambda add-permission \
--function-name "$function_name" \
--statement-id 'Id-123' \
--action "lambda:InvokeFunction" \
--principal $source_account \
--source-arn "$stream_arn" \
--source-account $source_account \
--region us-east-1 \
--profile "$profile"
Run Code Online (Sandbox Code Playgroud)

$source_account"A"的帐户ID 在哪里.

然后我尝试创建源映射:

 aws lambda create-event-source-mapping \
    --event-source-arn "$stream_arn" \
    --function-name "$function_name" \
    --starting-position TRIM_HORIZON \
    --region us-east-1 \
    --profile "$profile"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

调用CreateEventSourceMapping操作时发生客户端错误(InvalidParameterValueException):角色和事件源必须与云功能位于同一帐户中

我不明白这个错误.它说我想做的事是不可能的吗?但是,在这里如何通过S3 完成,这基本上是相同的机制?

amazon-web-services amazon-kinesis aws-lambda

7
推荐指数
1
解决办法
1950
查看次数

在 bash 中解析和存储 curl 命令的 json 输出

我有五个cURL单独运行良好的语句,并试图将它们放在一个 bash 脚本中。每个cURL语句都依赖于从cuRL在它之前执行的语句生成的变量。我正在尝试找出解决此问题的最明智的方法。这是第一个 cURL 语句;

curl -i -k -b sessionid -X POST https://base/resource -H "Content-Type: application/json" -H "Authorization: Authorization: PS-Auth key=keyString; runas=userName; pwd=[password]" -d "{\"AssetName\":\"apiTest\",\"DnsName\":\"apiTest\",\"DomainName\":\"domainNameString\",\"IPAddress\":\"ipAddressHere\",\"AssetType\":\"apiTest\"}"
Run Code Online (Sandbox Code Playgroud)

这工作正常,它产生这个输出;

{"WorkgroupID":1,"AssetID":57,"AssetName":"apiTest","AssetType":"apiTest","DnsName":"apiTest","DomainName":"domainNameString","IPAddress":"ipAddressHere","MacAddress":null,"OperatingSystem":null,"LastUpdateDate":"2017-10-30T15:18:05.67-07:00"}
Run Code Online (Sandbox Code Playgroud)

但是,在下一个cURL语句中,我需要使用整数 fromAssetID才能执行它。简而言之,如何获取AssetID值并将其存储到变量中以在下一个语句中使用?总共,我将使用 5 个cURL语句,它们依赖于在前面的语句中生成的值来执行。任何有关如何的见解都值得赞赏。

bash curl jq

7
推荐指数
1
解决办法
6798
查看次数

为什么我们在某些shell命令中执行'</ dev/null'

shell构造最近困惑了我,之间的区别是什么

while ! nc -z $HOST $PORT >/dev/null 2>&1 < /dev/null; do 
Run Code Online (Sandbox Code Playgroud)

while ! nc -z $HOST $PORT >/dev/null 2>&1 ; do
Run Code Online (Sandbox Code Playgroud)

bash shell

7
推荐指数
1
解决办法
582
查看次数

将数据格式化为表格格式

我是编码的新手,但想知道从 grep 计数数据生成表的最简单方法。

我的 grep count 输出文件如下所示:

AAR34355.1
./006D_id70.m8:0
./20D_id70.m8:0
./28D_id70.m8:0
AAR38850.1
./006D_id70.m8:0
./20D_id70.m8:2
./28D_id70.m8:4
A13520.1
./006D_id70.m8:0
./20D_id70.m8:0
./28D_id70.m8:0
Run Code Online (Sandbox Code Playgroud)

我需要一个输出看起来更像这样:

            ./006D_id70.m8    ./20D_id70.m8    ./28D_id70.m8
AAR34355.1         0                0                 0
AAR38850.1         0                2                 4
A13520.1           0                0                 0
Run Code Online (Sandbox Code Playgroud)

或至少是一个分隔的等价物。

请原谅我的描述,因为我对此很陌生。

有没有一种相对简单的方法来格式化数据?

bash

7
推荐指数
1
解决办法
73
查看次数

使用反引号时,Bash会抱怨here-document中的语法错误

我正在运行以下一段bash代码:

cat << END_TEXT
       _             _ 
      | |           | |
  __ _| |__   ___ __| |
 / _` | '_ \ / __/ _` |
| (_| | |_) | (_| (_| |
 \__,_|_.__/ \___\__,_|
END_TEXT
Run Code Online (Sandbox Code Playgroud)

并收到一个错误:

bash: command substitution: line 1: syntax error near unexpected token `|'
bash: command substitution: line 1: ` | '_ \ / __/ _'
Run Code Online (Sandbox Code Playgroud)

bash quoting cat backticks

6
推荐指数
1
解决办法
36
查看次数

使用带有bash扩展globbing的Interval表达式

我知道一个事实,它bash支持带有正则表达式的扩展glob,如支持@(foo|bar),*(foo)?(foo).这种语法非常独特,即与ERE不同 - 扩展的globs使用前缀表示法(操作符出现before其操作数),而不是像ERE那样的后缀.

我想知道它支持类型的间隔表达式特征{n,m},即如果在大括号一个数,如前述的正则表达式被重复n时间或是否存在由逗号分隔的两个数字,前述正则表达式被重复nm次.我找不到一个特定的文档,表明在扩展的glob中启用了这种支持.

实际问题

我在今天的一个问题中遇到了一个要求,即只删除字符串中的一对尾随零.尝试使用扩展的glob支持来解决这个问题bash

给出一些样本字符串

foobar0000
foobar00
foobar000
Run Code Online (Sandbox Code Playgroud)

应该产生

foobar00
foobar
foobar0
Run Code Online (Sandbox Code Playgroud)

我尝试使用带参数扩展的扩展glob来做

x='foobar000'
Run Code Online (Sandbox Code Playgroud)

分别.我尝试使用下面的区间表达式,这对我来说显而易见,它不会起作用

echo ${x%%+([0]{2})}
Run Code Online (Sandbox Code Playgroud)

即类似于sed在ERE中使用sed -E 's/[0]{2}$//'或在BRE中使用sed 's/[0]\{2\}$//'

所以我的问题是,这是否可以使用任何扩展的glob运算符?我正在寻找特定于使用扩展的glob支持的答案,bash如果不可能也会采取'否'.

bash shell

6
推荐指数
1
解决办法
295
查看次数

yq 从键值对中获取值

我有一个简单的values.yaml 文件,其中包含以下数据:

images:
  tags:
    one: abc:v0.3-16-07
    two: xyz:ng-0.23.0
    pq: qaa:0df1e21e752b3d3.2020-04-27_1
Run Code Online (Sandbox Code Playgroud)

使用

yq -r --yaml-output ".images.tags" values.yaml
Run Code Online (Sandbox Code Playgroud)

我可以得到以下输出

one: abc:v0.3-16-07
two: xyz:ng-0.23.0
pq: qaa:0df1e21e752b3d3.2020-04-27_1
Run Code Online (Sandbox Code Playgroud)

但我怎样才能从上面得到这些值呢?

yaml jq yq

6
推荐指数
1
解决办法
3万
查看次数

如何计算空单元格之间的值

我面临一个比我更大的问题。我有 18 个相对较大的文本文件(每个大约 30k 行),我需要计算第二列中空单元格之间的值。这是我的文件的一个简单示例:

Metabolism
line_1    10.2
line_2    10.1
line_3    10.3
TCA_cycle
line_4    10.7
line_5    10.8
Pyruvate_metab
line_6   100.8
Run Code Online (Sandbox Code Playgroud)

实际上,我有大约 500 条描述行(代谢、TCA_cycle 等),行的范围在零到几百之间。

我想计算每个块的值(块以描述开头,对应的行总是在下面),例如

Metabolism  30.6
line_1    10.2
line_2    10.1
line_3    10.3
TCA_cycle   21.5
line_4    10.7
line_5    10.8
Pyruvate_metab 100.8
line_6   100.8
Run Code Online (Sandbox Code Playgroud)

要不就

30.3
21.5
100.8
Run Code Online (Sandbox Code Playgroud)

如果将结果逐行打印到附加文件中,那不会有问题……或者其他替代方法。

有一件棘手的事情,它是没有数字行的描述。

Transport
line_1000   100.1
line_1001   100.2
Cell_signal
Motility
Processing
Translation
line_1002   500.1
line_1003   200.2
Run Code Online (Sandbox Code Playgroud)

甚至对于那些行并希望获得 0 值。

Transport     200.3
line_1000   100.1
line_1001   100.2
Cell_signal   0
Motility      0
Processing    0
Translation   700.3
line_1002 …
Run Code Online (Sandbox Code Playgroud)

awk

6
推荐指数
1
解决办法
144
查看次数

标签 统计

bash ×7

jq ×3

shell ×3

awk ×2

amazon-kinesis ×1

amazon-web-services ×1

aws-lambda ×1

backticks ×1

cat ×1

curl ×1

grep ×1

json ×1

quoting ×1

yaml ×1

yq ×1