通过Shell脚本读取properties文件中的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Shell脚本读取properties文件中的参数相关的知识,希望对你有一定的参考价值。

参考技术A 定义键值对pom.properties如下:

很多时候我们定义key的时候会想下面一样进行 分组 ,此时使用上面的所使用的 . 进行加载键值对shell就会报错,那么我们可以使用 grep 命令进行解决:

定义键值对pom.properties如下:

写成一个函数,将所需的key传入即可,最后也须将 \r 去除

参考链接

如何通过读取shell脚本中的csv文件来将2列的总和添加到新列中

【中文标题】如何通过读取shell脚本中的csv文件来将2列的总和添加到新列中【英文标题】:how to do the sum of 2 columns adding that into new column by reading the csv file in shell script 【发布时间】:2021-12-21 07:32:36 【问题描述】:

我正在尝试实现 shell 脚本来读取 csv 文件并对 2 列求和并添加到名为 total 的新列中。但它没有成功完成。请建议我如何实现这一目标。

我的输入 csv 文件

a,b,c
1,2,3
4,5,6

预期输出

a,b,c,total
1,2,3,5
4,5,6,11

这里 a 是主键

我尝试了下面的代码来实现这一点

echo "First arg: 1"
awk "print $3 $2 """""" $1"
echo "First arg: 2
awk -F, "$(NF+1)=Null;1" OFS=, file.csv
awk -F "," "print $1,$2,$3,$2+$3"

我的输出是:

C:\Users\inrenan\NIFI\NIFI-1~1.2-B\NIFI-1~1.2>awk -F "," "print $1,$2,$3,$2+$3" 
a b c 0
1 2 3 5
4 5 6 11

只有我面临的问题是列名

【问题讨论】:

"但是没有成功。"你试过什么没用? @SamBob 请再次检查我更新的问题 主持人:这个问题与当前标记的***.com/questions/62980230/… 不是重复的。这个问题分别对每一行求和,那个问题对所有列求和 【参考方案1】:

这是您需要的 awk 脚本:

BEGIN FS=OFS=","   print $0, (NR==1 ? "total" : $2+$3) 

做任何你必须在 Windows 中使用它的魔法咒语。

在 Unix 中你只需要这样做:

awk 'BEGIN FS=OFS=","   print $0, (NR==1 ? "total" : $2+$3) ' input
a,b,c,total
1,2,3,5
4,5,6,11

但我听说 Windows 有一些最好避免的奇怪引用规则,因此我看到的针对 Windows 的常见建议是将脚本保存在名为 script.awk 的文件中(在 Unix 中也可以这样做)并将其调用为:

awk -f script.awk input
a,b,c,total
1,2,3,5
4,5,6,11

根据您问题中的最后一个脚本,这可能适用于 Windows,但我真的不知道 Windows 引用规则:

awk "BEGIN FS=OFS=\",\"   print $0, (NR==1 ? \"total\" : $2+$3) " input

【讨论】:

【参考方案2】:

使用您展示的示例,请尝试关注awk 程序。这里提到了一个名为fields 的变量awk,其值为2,3,我们可以在其中提到以, 分隔的字段编号,它会处理所有这些字段的总和。

awk -v fields="2,3" '
BEGIN
  FS=OFS=","
  num=split(fields,arr,",")
  for(i=1;i<=num;i++)
    field[arr[i]]
  

FNR==1  print $0,"total"; next 
FNR>1
  sum=0
  for(i=1;i<=NF;i++)
    if(i in field) sum+=$i 
  
  $(NF+1)=sum

1
'  Input_file

【讨论】:

【参考方案3】:

对于非常繁琐的单行:

awk -F',' 'if (NR==1) printf "%s,total\n",$0; else sum=0; for(i=2; i<=NF; i++) sum +=$i; printf "%s,%s\n",$0,sum;' file.csv

【讨论】:

我正在使用.bat 文件编写shell 脚本,我遇到了上述错误,我将' 更改为" 但面临同样的问题 我猜你是在 Windows 中运行的。您确定您正在运行bash 而不是cmd.exe?你用什么运行你的脚本(哪个程序和什么命令)? 是的,我使用.bat格式文件在windows中运行,我更新了我的代码输出,请检查它 “在 Windows 中”来自 cmd?电源外壳? WSL?如果前两个中的任何一个都不是标记的 bash 问题。此解决方案适用于 bash。【参考方案4】:

这是一个获得所需输出的纯批处理文件:

@echo off
setlocal EnableDelayedExpansion

set /P "header=" < input.txt
echo !header!,total
for /f "skip=1 tokens=1-3 delims=," %%a in (input.txt) do (
   set /A "total=%%b+%%c"
   echo %%a,%%b,%%c,!total!
)

【讨论】:

以上是关于通过Shell脚本读取properties文件中的参数的主要内容,如果未能解决你的问题,请参考以下文章

怎么用shell脚本 去 读取MySQL中的数据,并把数据传到该脚本中? 谢谢!

使用shell脚本读取html文件中的值

读取循环时的Shell脚本仅执行一次

如何在Shell脚本中逐行读取文件

c#如何读取配置文件中的信息

shell脚本文件夹内文件依次执行