アカウント名:
パスワード:
個人的には、bashにこれをさせるのか、とは思いますがそれはさておき。
(1) 入力(data)を1行ずつ読み、タグをチェック。(2) 前回の出力のタグ(以下prekey)と現在行のタグが違う場合は、そのまま出力。(3) 前回の出力のタグ(以下prekey)と現在行のタグが同じ場合は、出力せずバッファに保存(nextdata)。(4) dataの処理が終わって、nextdataにデータが残っていれば、(1)~(3)をnextdataに対して再実行。(5) もし(1)~(3)の処理で一度も出力できなかったのにnextdataがある場合(これは同じタグばかり残った場合)は諦めてまとめて出力して終了。
#!/bin/bash
inputfile=data.txtoutputfile=result.tx
あぁ、なるほど…
それなら別の手がありますね。
1) まず key が先頭にあるんだから、それに基づいて sort (同じ key が集まる)2) 1行づつ読んで、keyが同じ間は、先頭に番号を1づつ増やしながら振る。 結果はテンポラリファイルに保存。 key が変わったら番号を1に戻してそこから振り直す3) 行頭に割り振った「番号」にもとづいて numerical sort をかける4) 行頭の「番号」を外す
aaa, d001bbb, d001aaa, d003bbb, d002ccc, d010 : ⇒aaa.d001aaa.d003bbb.d001bbb,d002ccc,d010
cat data |\ ←実際はここは別のプログラムがデータを流し込んでくると思いねぇ sort |\ ← まずは key でソート gawk 'BEGIN{ FS="," } (key !=$1){ key = $1; count=1 }{ print count "," $0 ;count++ }' |\ ← 頭に key ごとの番号ふり sort --field-separator="," --key=1 -n |\ ← さっきつけた番号でソート sed -r 's/^[0-9]+,//g' ←行等につけた番号を取り外し
動いた動いた(上記が動かないとしたら、コピペの途中で失敗したという事)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人
解答例 (スコア:2)
個人的には、bashにこれをさせるのか、とは思いますがそれはさておき。
(1) 入力(data)を1行ずつ読み、タグをチェック。
(2) 前回の出力のタグ(以下prekey)と現在行のタグが違う場合は、そのまま出力。
(3) 前回の出力のタグ(以下prekey)と現在行のタグが同じ場合は、出力せずバッファに保存(nextdata)。
(4) dataの処理が終わって、nextdataにデータが残っていれば、(1)~(3)をnextdataに対して再実行。
(5) もし(1)~(3)の処理で一度も出力できなかったのにnextdataがある場合(これは同じタグばかり残った場合)は諦めてまとめて出力して終了。
#!/bin/bash
inputfile=data.txt
outputfile=result.tx
人生は七転び八起き、一日は早寝早起き
Re: (スコア:1)
あぁ、なるほど…
それなら別の手がありますね。
1) まず key が先頭にあるんだから、それに基づいて sort (同じ key が集まる)
2) 1行づつ読んで、keyが同じ間は、先頭に番号を1づつ増やしながら振る。
結果はテンポラリファイルに保存。
key が変わったら番号を1に戻してそこから振り直す
3) 行頭に割り振った「番号」にもとづいて numerical sort をかける
4) 行頭の「番号」を外す
aaa, d001
bbb, d001
aaa, d003
bbb, d002
ccc, d010
:
⇒
aaa.d001
aaa.d003
bbb.d001
bbb,d002
ccc,d010
fjの教祖様
実装してみた (スコア:1)
動いた動いた(上記が動かないとしたら、コピペの途中で失敗したという事)
fjの教祖様