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