String 如何使用AWK中另一个变量的长度分配重复字符的变量?

String 如何使用AWK中另一个变量的长度分配重复字符的变量?,string,bash,awk,String,Bash,Awk,我想要有一个重复或空格长度的变量pat,我尝试了以下命令 awk -v pat="AAGCTT" -v rep=$("printf '.%.0s' length(pat)") awk -v pat="AAGCTT" -v rep=$("printf '.%.0s' {1..length(pat)}") some actions using both pat & rep as variable 但会输出以下

我想要有一个重复
空格
长度的变量
pat
,我尝试了以下命令

awk -v pat="AAGCTT" -v rep=$("printf '.%.0s' length(pat)")
awk -v pat="AAGCTT" -v rep=$("printf '.%.0s' {1..length(pat)}")

some actions using both pat & rep as variable
但会输出以下错误

printf '.%.0s' {1..length(pat)}: command not found
如何生成所需的变量?

您可以使用:

var=$(awk -v pat="AAGCTT" 'BEGIN { printf "%*s", length(pat), "" }')
echo "${#var}"
您可以只执行
gsub
并重用
rep
,而不是
printf

var=$(awk -v pat="AAGCTT" -v rep="." 'BEGIN {
gsub(/./, rep, pat); print pat}')
您可以使用:

var=$(awk -v pat="AAGCTT" 'BEGIN { printf "%*s", length(pat), "" }')
echo "${#var}"
您可以只执行
gsub
并重用
rep
,而不是
printf

var=$(awk -v pat="AAGCTT" -v rep="." 'BEGIN {
gsub(/./, rep, pat); print pat}')

我找到了一种分配
rep
的方法,其中重复字符
X
的长度(pat)

在哪里


我找到了一种分配
rep
的方法,其中重复字符
X
的长度(pat)

在哪里


我想在awk的以下操作中重用
rep
pat
变量,因此这对我来说可能不是一个好的解决方案。我们可以使用
rep
,但您的
语法为“printf”。%.0s'长度(pat)”
是错误的,因为它试图在
shell
中使用错误的shell语法执行
printf
。请参阅我关于如何使用
rep
参数的更新答案。虽然这是正确的,但如果需要,我必须更改
pat
两次,这会使它更加复杂,谢谢anyway@hey0god你在说什么?如果这不符合您的要求,那么为什么您会接受它作为答案,从而阻止其他人发布可能符合您要求的答案?我想在awk的以下操作中重用
rep
&
pat
变量,因此,这对我来说可能不是一个好的解决方案。我们可以使用
rep
,但您的
“printf.%.0s”length(pat)
语法是错误的,因为它试图在
shell
中执行
printf
,shell语法不好。请参阅我关于如何使用
rep
参数的更新答案。尽管这是正确的,如果需要,我必须更改两次
pat
,这会使它更复杂,谢谢anyway@hey0god你在说什么?如果这不符合你的要求,那么为什么你会接受它作为答案,从而阻止其他人发布可能符合你要求的答案?这怎么会比@anubhava在他的答案中向你展示的更优雅呢?你的脚本只是他提供的第二个脚本的一个小改动,因此你现在正在硬编码替换字符。我刚刚编辑了我自己的答案,删除了硬代码,功能与@anubhava answer相同,但是,
pat
变量只需要在我认为您一定误解了@anubhavas scripts在做什么时才需要更改,因为他在第一个脚本中更改了
pat
变量,在第二个脚本中只更改了一次。你唯一的不同是你引入了一个不必要的awk变量,名为
var
。这比@anubhava在他的回答中向你展示的更优雅吗?你的脚本只是他提供的第二个脚本的一个小改动,因此你现在正在硬编码替换字符。我刚刚编辑了我自己的答案,删除了硬代码,功能与@anubhava answer相同,但是,
pat
变量只需要在我认为您一定误解了@anubhavas scripts在做什么时才需要更改,因为他在第一个脚本中更改了
pat
变量,在第二个脚本中只更改了一次。唯一的区别是引入了一个不必要的awk变量,名为
var
pat = "AAGCTT"
rep = "X"
var = "XXXXXX"