2017-08-03 10 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 

私は現在、それが実際に動作理由を理解するのに苦労しています。.. は、どのようにそれが正確確率正しいを連結ん...

"repost"を作成して申し訳ありませんが、私は元の投稿を見つけることができませんでした。そのため、このようにしなければなりません。

+0

@エドモートン情報をお寄せいただきありがとうございます。私はそれを使用している例で、例を変更しました... – 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 ] 

それは彼らは、入力ファイルに表示さために、各センテンスの確率を連結して「文章」を印刷しませんランダムな順序で。

関連する問題