使用 awk 分配 ksh/bash 数组
我正在尝试将给定的行转换为数组,例如这一行:
我的第一个\t \t你好世界
以下 ksh/bash 数组:
[0]="My first"
[1]=""
[2]="Hello world"
我的代码:
TAB=`printf '\011'`
query()
{
echo "$1"|awk -F"$TAB" '
{
for(i = 0; i < NF; i++)
QueryArray[i]=$i
}';
}
line=`head -n 1 myFile`
typeset -a QueryArray;
query "$line"
echo "Array length: ${#QueryArray[*]}"
echo "- " ${QueryArray[0]}
echo "- " ${QueryArray[1]}
echo "- " ${QueryArray[2]}
但不起作用,有什么建议吗?
谢谢。
I'm trying to transform a given line to an array, for example this line :
My first\t \tHello world
to the following ksh/bash array:
[0]="My first"
[1]=""
[2]="Hello world"
My code:
TAB=`printf '\011'`
query()
{
echo "$1"|awk -F"$TAB" '
{
for(i = 0; i < NF; i++)
QueryArray[i]=$i
}';
}
line=`head -n 1 myFile`
typeset -a QueryArray;
query "$line"
echo "Array length: ${#QueryArray[*]}"
echo "- " ${QueryArray[0]}
echo "- " ${QueryArray[1]}
echo "- " ${QueryArray[2]}
but doesn't work, any suggestions?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我有一个较旧的 ksh,它不理解
$'ANSI'
字符串,因此:对于 bash:
我得到了相同的结果 ar Arnaud 对 David 的评论:使用“word\t\tword”,中场正在被放弃。我没有看到使用不同的分隔符(例如冒号)的情况。
克什
bash
I have an older ksh that does not understand
$'ANSI'
strings, so:for bash:
I'm getting the same result ar Arnaud's comment to David: with "word\t\tword", the middle field is being dropped. I don't see that with a different delimiter such as colon.
ksh
bash
您需要使用
typeset
而不是declare
,并使用function
关键字。否则, satyajit 的答案就很好。科恩壳为您化...
You need to use
typeset
instead ofdeclare
, and use thefunction
keyword. Otherwise, satyajit's answer works just fine.Kornshellified for you...