【问题标题】:How to pass the file as a input to the array如何将文件作为输入传递给数组
【发布时间】:2020-05-20 05:12:20
【问题描述】:

我是 linux 新手,运行命令序列后,我在文件中有输出。 现在我需要将此文件传递到一个数组中,并且我需要推入 Influxdb

文件的输出如下:

daily/A1D05181200052209001 482668
daily/A1D05181200052212001 513278
daily/A1D05181200052215001 482668
daily/A1D05181200052218001 513278
daily/A1D05181200052221001 482668
daily/A1D05181200052300001 513278
daily/A1D05181200052303001 482668

所以到目前为止,我试图将文件作为输入提供给数组,如下所示

mapfile -t myArray < $FILESIZE5
while IFS= read -r line; do echo "$line"; done < $FILESIZE5 > $FILESIZE4
cat $FILESIZE4

当我运行上述命令时,我得到的输出类似于

    daily/A1D05181200052209001 482668
    daily/A1D05181200052212001 513278
    daily/A1D05181200052215001 482668
    daily/A1D05181200052218001 513278
    daily/A1D05181200052221001 482668
    daily/A1D05181200052300001 513278
    daily/A1D05181200052303001 482668

但我需要做的是......我需要发出命令将值插入流入数据库中。 命令就像

curl -i -XPOST "http://localhost:8086/write?db=S3ck&precision=s" --data-binary "ecmwfarchiveold,bucketpath=ecmwf-archive/daily/A1D05181200052209001 size=482668"

我需要在数组中给出这个 curl 命令,以便可以将值插入到数据库中。 谁能帮我解决这个问题!

我正在从 S3bucket 中获取以 A1D0518 开头的文件并将其存储在一个文件中

aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, 'A1D0518')]" --output text | awk '{print $2, $4}' >> "$FILESIZE"

sed 's/awsadmin//g' "$FILESIZE" > "$FILESIZE1"
grep '[^[:blank:]]' < "$FILESIZE1" > "$FILESIZE5"

#cat $FILESIZE5
wc -l $FILESIZE5

【问题讨论】:

    标签: arrays linux bash shell curl


    【解决方案1】:

    你可以解析输出目录。

    #!/usr/bin/env bash
    
    while read -r first second; do
      curl -i -XPOST "http://localhost:8086/write?db=S3ck&precision=s" --data-binary "ecmwfarchiveold,bucketpath=ecmwf-archive/daily/$first size=$second"
    done < <(command_that_genereates_the_output)
    

    【讨论】:

    • 您可以使用进程替换&lt;( ),而不是将命令的输出重定向到文件
    • 我给了这样的while read -r first second; do echo curl -i -XPOST "http://localhost:8086/write?db=S3check&amp;precision=s" --data-binary "testecmwftrack,bucketpath=daily/$first size=$second" done 但是请让我知道我应该在哪里提供输入文件,即 $FILESIZE5
    • 什么是filesize5?那是数组吗?
    • 就像我说的,您可以跳过文件/数组的创建,只需使用在&lt;( ) 内生成输出的命令序列,或者如果您真的喜欢该文件,请将其放在@987654325 之后@例如done &lt; "$filesize5" 虽然你真的可以把它放在循环之前,但只是为了便于阅读,把它放在 done 之后
    • $FILESIZE5 是问题部分daily/A1D05181200052209001 482668 etc 中提到的内容的文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2020-05-17
    • 1970-01-01
    • 2021-07-16
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多