2015-09-06 40 views
0

我在变量ArtTEXT中有这个(演示)文本。AWK - 将一个变量拆分成一个索引而没有循环的数组

1|Reporting Problems and Bugs. 
2|Other freely available awk implementations. 
5|Summary of installation. 
8|How to disable certain gawk extensions. 
3|Making Additions To gawk. 
7|Accessing the Git repository. 

这是一个变量,其中行用已知字符串分隔。

我想将它分成一个数组,其中行首的数字将是使用一个命令的数组行的索引,而不循环行。

结果应该是:

arr[1] => Reporting Problems and Bugs. 
arr[2] => Other freely available awk implementations. 
arr[5] => Summary of installation. 
arr[8] => How to disable certain gawk extensions. 
arr[3] => Making Additions To gawk. 
arr[7] => Accessing the Git repository. 

这可能吗?

+0

[将字符串拆分为使用awk的数组]可能的副本(http://stackoverflow.com/questions/8009664/split-string-to-array-using-awk) –

+1

难道你不认为它会使它如果您告诉我们这个界定线条的“已知字符串”是什么,我们更容易帮助您? –

回答

1

不需要使用数组,因为您只需更改字段分隔符即可。

awk 'BEGIN{FS="|"}{print $1, $2}' input.txt 

$ 0包含全线 $ 1包含索引 $ 2句

2

不,这是不可能的。以下是如何从变量,只要你想填充数组(假设分隔行“已知串”是一个换行符):

$ awk -v ArtTEXT='1|Reporting Problems and Bugs. 
2|Other freely available awk implementations. 
5|Summary of installation. 
8|How to disable certain gawk extensions. 
3|Making Additions To gawk. 
7|Accessing the Git repository.' ' 
BEGIN { 
    split(ArtTEXT,lines,/\n/) 
    for (lineNr in lines) { 
     split(lines[lineNr],flds,/\|/) 
     arr[flds[1]] = flds[2] 
    } 

    for (i in arr) { 
     printf "arr[%d] => %s\n", i, arr[i] 
    } 
} 
' 
arr[1] => Reporting Problems and Bugs. 
arr[2] => Other freely available awk implementations. 
arr[3] => Making Additions To gawk. 
arr[5] => Summary of installation. 
arr[7] => Accessing the Git repository. 
arr[8] => How to disable certain gawk extensions. 
+0

我不知道它是否重要,但订单没有保留。 – karakfa

+0

输出顺序?没关系。如果OP想要按照读取的顺序输出这些行,它将是一个更简单的脚本。相反,他希望填充一个数组,并且需要由第一个输入值提供的索引,因此他打算按照读取的顺序执行除了遍历数组之外的其他操作,否则他会希望它通过lineNr或类似索引。很显然,如果他想按照读取的顺序处理数组,他只需要在第一个循环中填充第二个数组,如'idx [lineNr] = flds [1]',以便开始索引。 –

0

如果记录分隔符是换行,你可以重复使用引号扩张的变量,使用awk像往常一样,如

echo "$ArtTEXT" | awk -F"|" '{ix[NR]=$1;arr[$1]=$2} END{for(i=1;i<=NR;i++) print "arr[" ix[i] "] => " arr[ix[i]]}' 

arr[1] => Reporting Problems and Bugs. 
arr[2] => Other freely available awk implementations. 
arr[5] => Summary of installation. 
arr[8] => How to disable certain gawk extensions. 
arr[3] => Making Additions To gawk. 
arr[7] => Accessing the Git repository. 

由于awk数组不保存,你需要保持一个单独的索引的顺序。

+1

你假设OP意味着'ArtTEXT'是一个SHELL变量。他没有在他的问题中提到shell,所以我假设它是一个AWK变量。 –

相关问题