bashを使用して列内の3つ以上の連続語をソートする

bashを使用して列内の3つ以上の連続語をソートする

一人で解決しようとしましたが、成功しなかった問題について助けを求めます。まもなく、次のような構造を持つ非常に大きなテーブル形式のデータファイルを処理する必要がありました。

14       R
16       I
21       B
22       C
23       Q
24       E
33       R
34       L
41       K
62       F
63       F
64       M
88       B

ちょっと待ってください...このソートされた昇順データにしたいのは、最初の列の3つ以上の連続語ブロックに対応する2番目の列の項目をソートすることです。したがって、上記のデータの予想出力は次のようになります。

21-24    BCQE
82-64    FFM

これまで私が完成したコードは次のとおりです。

prev=0
val=$(prev + 1)
while read -r n a ; do
    if [[ ${n} == ${val} ]] 
        t="$( "$a" + ( "$(a - 1)" ) )"  ; then
        echo "$t"
    fi
    prev=$n
done < table

しかし、うまくいきません。

ベストアンサー1

解決策awk

awk '{if(p+1==$1){c+=1}else{ if(c>1){printf "%s-%s %s\n", b, p, s;} c=0;s=""}} c==1{b=p} {p=$1;s=s$2}' file

今回は説明が読みやすくなります。

awk '{ 
  if(p+1==$1){
    c+=1 # increment the counter if the value is consecutive
  } else {
    if(c>1){
      # print the begin and end values with the concatenated string
      printf "%s-%s %s\n", b, p, s;
    }
    c=0 # reset the counter
    s="" # reset the string to print
  }
}
c==1{b=p} # set the begin value
{p=$1;s=s$2} # set the previous variable and the string for the next loop
' file 

GNUを使ってテストawkするmawk

おすすめ記事