如何将数组的内容存储到awk程序中的文件中?

时间:2018-01-19 13:40:03

标签: arrays bash shell unix awk

我在awk程序中有这个数组。我想将此数组存储到一个文件中,以便稍后进行其他操作。你能帮忙吗? 如果有人显示一个简单的一行awk程序来执行此任务,我们非常感激。 基本上我有一个包含30多行的文件,每行包含以下格式的数据 - 文本1; [标签]]; tag_comments

我的脚本只提取标记并将其存储在数组中。

 BEGIN{
    tags_file = "tags.dat";
    tag_cnt = 0;
    while(getline x < tags_file > 0){
    n = split(x,a,/\;/);
    if(n >= 3){
      tag_stripped = substr(a[2],3,length(a[2])-4)
      tag[tag_cnt] = tag_stripped;
      tag_cnt++;
      }
    }
    close(tags_file) 
    }  

EXAMPLE of file--line 1--john;[[smith]];john is a vegetarian  
line 2- mark;[[henry]];mark henry is a wrestler  
line 3- john;[[travolta]]; john travolta has acted in Pulp fiction.  
etc....  

我在这里提取史密斯,亨利和特拉沃尔塔并将它们存储在一个阵列中。我想将这个数组的内容存储在一个文本文件中,以便进一步处理,因为我从另一个shell脚本调用这个awk脚本。

1 个答案:

答案 0 :(得分:0)

在程序的内部if中:

if(n >= 3){
  tag_stripped = substr(a[2],3,length(a[2])-4)
  tag[tag_cnt] = tag_stripped;
  tag_cnt++;
  }

您只需添加以下内容:

print tag_stripped > tag_output

here。不过,这似乎是重新实现了awk在 awk中的。以下是您的目标,或者上面的例子中有很多缺失?

~$> cat test.input 
john;[[smith]];john is a vegetarian  
mark;[[henry]];mark henry is a wrestler  
john;[[travolta]]; john travolta has acted in Pulp fiction.

~$> awk -F'(\\[\\[|\\]\\])' '{ print $2 }' test.input >test_output

~$> cat test_output 
smith
henry
travolta

此外,也许sed可以:

sed 's/^[^[]*\[\[//; s/\]\][^]]*$//;' test.input >test.output