Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash中的脚本_Bash_Sed_Awk - Fatal编程技术网

Bash中的脚本

Bash中的脚本,bash,sed,awk,Bash,Sed,Awk,我在bash say parse中有一个函数,它接受一个参数,函数名为f。我要处理的文件有点像 a@b@c@ a@d@e@g@ m@n@ t@ 我想把输出作为 a@f(b)@f(c)@ a@f(d)@f(e)@f(g)@ m@f(n)@ t@ 这就是将函数f应用于除第一个函数外的所有函数。有什么线索吗?我该怎么做?您可以使用sed: sed -e 's/@\(.\)/@f(\1)/g' 您可以使用sed: sed -e 's/@\(.\)/@f(\1)/g' 这应该做到: sed 's/

我在bash say parse中有一个函数,它接受一个参数,函数名为f。我要处理的文件有点像

a@b@c@
a@d@e@g@
m@n@
t@
我想把输出作为

a@f(b)@f(c)@
a@f(d)@f(e)@f(g)@
m@f(n)@
t@
这就是将函数f应用于除第一个函数外的所有函数。有什么线索吗?我该怎么做?

您可以使用sed:

sed -e 's/@\(.\)/@f(\1)/g'
您可以使用sed:

sed -e 's/@\(.\)/@f(\1)/g'
这应该做到:

sed 's/@\([^@]*\)/@f(\1)/g'
如果所有字段都是单个字符,您可以将其简化一点(例如,使用
而不是
\([^@]*\)
)。

这应该可以做到:

sed 's/@\([^@]*\)/@f(\1)/g'

如果所有字段都是单个字符,您可以将其简化一点(例如,使用
而不是
\([^@]*\)
)。

awk'BEGIN{OFS=FS=“@”}{for(i=2;i
awk'BEGIN{OFS=“@”}{for(i=2;i也许这就是您想要的

e、 g.您有一个名为sqr.sh的脚本:

kent$  cat sqr.sh
#!/bin/bash
echo $(($1*$1))
现在,您要在输入上应用上述函数:

kent$  echo "foo@2@3@4@
0@10@20@
x@"|awk -F'@' -v OFS=@ '{for(i=2;i<=NF;i++) if($i) "./sqr.sh "$i|getline $i; print}'

foo@4@9@16@
0@100@400@
x@
kent$echo”foo@2@3@4@
0@10@20@

也许这就是你想要的

e、 g.您有一个名为sqr.sh的脚本:

kent$  cat sqr.sh
#!/bin/bash
echo $(($1*$1))
现在,您要在输入上应用上述函数:

kent$  echo "foo@2@3@4@
0@10@20@
x@"|awk -F'@' -v OFS=@ '{for(i=2;i<=NF;i++) if($i) "./sqr.sh "$i|getline $i; print}'

foo@4@9@16@
0@100@400@
x@
kent$echo”foo@2@3@4@
0@10@20@

x | awk-F'-v of s={for(i=2;如果t@它给了我t@f()我必须对值应用函数,而不是打印语句。也就是说,如果函数是平方的,取x,那么我应该打印x^2的值t@f()我必须在值上应用函数,而不是打印语句。也就是说,如果函数是平方的,取x,那么我应该打印x^2的值。对于t@它给了我t@f()我必须对值应用函数,而不是打印语句。也就是说,如果函数是平方的,取x,那么我应该打印x^2的值。我看不到结果:
$echo“t@”sed-e's/@\(.\)/@f(\1)/g'
会给我“t@”作为结果。如果需要计算结果(并且它是有效的bash)您只需将其括在$(…)中即可执行输出。它只需回显%%%$(parse2(雪茄))%%$(parse2(跳转))%%$(parse2())而不是应用函数并返回结果。这里有点不清楚您实际要实现什么。bash函数的应用程序不使用括号,因此我不确定这些是您试图调用的bash函数。但是,用$(…)括起整个sed操作将导致sed的输出由bash.HTH执行t@f()我必须对值应用函数,而不是打印语句。也就是说,如果函数是平方的,取x,那么我应该打印x^2的值。我看不到结果:
$echo“t@”sed-e's/@\(.\)/@f(\1)/g'
给我“t@”因此,如果需要计算结果(并且它是有效的bash),只需将其包含在$(…)中,即可执行输出。它只需回显%%%$(parse2(雪茄))%%$(parse2(跳转))%%$(parse2())而不是应用函数并返回结果。这里有点不清楚您实际要实现什么。bash函数的应用程序不使用括号,因此我不确定这些是您试图调用的bash函数。但是,用$(…)括起整个sed操作将导致sed的输出由bash.HTH.query=
echo执行ab@cd@ef%%%“|awk'BEGIN{OFS=FS=“@”}{for(i=2;i您的问题不清楚。函数定义在哪里?在awk/shell/…?请注意,
$()
是shell语法,而不是bash。对于awk,您需要使用
system()
query=
echo”ab@cd@ef%%%。”|awk'BEGIN{OFS=FS=“@”}{for(i=2;i)您的问题不清楚。函数定义在哪里?在awk/shell/…中?请注意,
$()
是shell语法,而不是bash。对于awk,您需要使用
system()
这非常有效,除非$i中有空格,否则它会做一些不好的事情。我尝试了如下组合“/sqr.sh$i”、“/sqr.sh${i}”、“/sqr.sh”“$i”、“/sqr.sh”“${i}”但这些无效..然后在将其传递到脚本(例如sqr.sh)之前删除空格。但是需要处理大量特殊字符..无论如何,非常感谢:-)这很有魅力,只是如果$i中有空格,那么它会做一些不好的事情。我尝试了组合,比如“/sqr.sh$i”、“/sqr.sh${i}”、“/sqr.sh”“$i”、“/sqr.sh”“${i}”,但这些组合都不起作用。然后在将空格传递给脚本(例如sqr.sh)之前删除这些空格.但是我需要处理大量的特殊字符..无论如何,非常感谢:-)