gpt4 book ai didi

awk - 在shell脚本中增加输入变量数

转载 作者:行者123 更新时间:2023-12-04 10:55:26 25 4
gpt4 key购买 nike

我有很多脚本在其中读取输入参数。我需要将所有输入参数增加 1。所以如果它是 1,它需要是 2 & 2 需要 3 等等。是否有任何 unix 命令可以一次性替换所有脚本而不是去每个脚本并手动完成。我是 Unix 的新手,不确定是否有任何方法可以做到。下面是示例。感谢您对此的任何帮助。

变更前

#!/bin/ksh
hv_bus_date="CAST('$1' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=$2
hv_act_id=$3

更改后
#!/bin/ksh
hv_bus_date="CAST('$2' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=$3
hv_act_id=$4

最佳答案

编辑:在没有 GNU 的情况下将输出保存到 Input_file(s) 本身 awk尝试遵循(但请确保您运行我的第一个解决方案以查看输出是否正确)。

假设我们有需要更改其值的脚本。

-rw-rw-r-- 1 ubuntu ubuntu  83 Dec  8 14:34 file2.ksh
-rw-rw-r-- 1 ubuntu ubuntu 83 Dec 8 14:34 file1.ksh

我们的 awk脚本的名称是 script.ksh确保此脚本不会受到其自身的关注:)
cat script.ksh
awk '
FNR==1{
close(out)
out="out"++count
rename=(rename?rename ORS:"") "mv " out OFS FILENAME
}
match($0,/\$[0-9]+/){
before=substr($0,1,RSTART)
value=substr($0,RSTART+1,RLENGTH)
rest=substr($0,RSTART+RLENGTH)
if(value<9){
value++
}
print before value rest > (out)
}
END{
if(rename){
system(rename)
}
}
' file*sh

现在,当我们通过执行 ./script.ksh 运行上述脚本时我们可以使用名为 file1.ksh 的文件之一看到它的内容现在已经改变如下。

之前:
cat file1.ksh
hv_bus_date="CAST('$1' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=$2
hv_act_id=$3

之后:
cat file1.ksh
hv_bus_date="CAST('$2' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=$3
hv_act_id=$4



第一个解决方案:考虑到您的脚本名称以 .sh 结尾,您能否尝试以下操作?扩展,这不会将输出保存到 Input_file(s) 中,它会在终端上打印输出,仅供您检查输出是否正常。
awk '
match($0,/\$[0-9]+/){
before=substr($0,1,RSTART)
value=substr($0,RSTART+1,RLENGTH)
rest=substr($0,RSTART+RLENGTH)
if(value<9){
value++
}
print before value rest
}
' *sh



第二种解决方案(只有较新版本的 GNU awk):一旦您对上述命令的结果感到满意,如果您有 gawk命令然后尝试遵循,这应该将输出保存到 Input_file(s) 本身。恕我直言,这需要 gawk 4.1.0 + 版本。
awk -i inplace -v INPLACE_SUFFIX=.bak '
match($0,/\$[0-9]+/){
before=substr($0,1,RSTART)
value=substr($0,RSTART+1,RLENGTH)
rest=substr($0,RSTART+RLENGTH)
if(value<9){
value++
}
print before value rest
}
' *sh

关于awk - 在shell脚本中增加输入变量数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59234999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com