2017-08-03 53 views
1

我发了一个帖子前一段时间中,我正在寻求固定的文本文件帮助.. 我的问题是,我有一个文本文件,该行地方放置不当..这个awk函数到底做了什么?

例如:

https://pastebin.com/mLfzxcxB

在该脚本的目的是来连接每个句子的概率正确的顺序..

因此,在这种情况下,将最终的结果是

https://pastebin.com/6vApi6cs

在众多的解决方案,这是:??

awk 'NF == 2{ match($1,/^[0-9]+(_[0-9]+){7}/); k = substr($1,RSTART,RLENGTH); next } 
    { $NF=""; a[k]=a[k]"\n "$0 } 
    END { for(i in a) printf "%s [%s ]\n\n",i,a[i] }' input 

我目前正在努力理解为什么它的实际工作.. 它是如何串连正确的概率准确..

对不起,“转发”,但我找不到原来的帖子,这就是为什么我必须这样做。

+0

@EdMorton感谢您的信息。我改变了这个例子,有一个我一直在使用它... – akw

回答

0
awk ' 
NF == 2 {       # for those records with 2 fields 
    match($1,/^[0-9]+(_[0-9]+){7}/) # look for 1_1_1_1_0_0_1_0_2279 
    k = substr($1,RSTART,RLENGTH) # k=1_1_1_1_0_0_1_0_2279 
    next        # skip to next record 
} 
{         # for all the other kinds of records 
    $NF=""       # delete the ] from the end 
    a[k]=a[k]"\n "$0     # hash into a using k as key, "grouping" 
} 
END {        # after all data is grouped into a 
    for(i in a)      # for each key 
     printf "%s [%s ]\n\n",i,a[i] # print the key and the data 
}' input 

这个awk函数到底做了什么?基本上,事实证明这些:

1_1_1_1_1_0_1_0_666 [ 
    1 0 0 ] 
1_1_1_1_1_0_1_0_666 [ 
    0 1 0 ] 

成这样:

1_1_1_1_1_0_1_0_666 [ 
    1 0 0 
    0 1 0 ] 

串联每个句子的概率在以便它们出现在输入文件并打印“句子”出来的以随机顺序。