アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のようなファイルがあった場合、

1, 2, 3
1, 3, 5
2, 4, 7
3, 1, 0
3, 1, 2
3, 7, 1
4, 0, 0
5, 0, 0

1カラム目が重複する行を検索して、該当する行全体を削除し、(最初に見つかった行はそのままで、それ以降の重複行は削除したい)次のようなファイルにする場合は、どのようなコマンド、スクリプト作成すればよいでしょうか?

1, 2, 3
2, 4, 7
3, 1, 0
4, 0, 0
5, 0, 0

A 回答 (4件)

こんにちは。

データは第1カラムでソートしてあるとして、
uniq(ユニーク)コマンド単体でもいけます。

$ uniq -w 1 csvfile

GNU uniq の場合、「-w N」または「--check-chars=N」(N は数字)
オプションを使えば、(他のオプションでフィールドや文字のスキップをした後の)
先頭から N 文字までしか比較しません。
N には第1カラムの最大文字数を指定してください。詳しくは man uniq で。

参考URL:http://www.linux.or.jp/JM/html/gnumaniak/man1/un …
    • good
    • 1

もし、perlでよければ、以下のようなスクリプトを作成してください。


---------------------------------------
while(<>){
($col1) = split(/,/);
if ($data{$col1}) {next;}
$data{$col1} = 1;
print ;
}
---------------------------------------
perl このスクリプト名 入力データファイル > 出力データファイル
とすると、出力データファイルに結果が書き込まれます。
    • good
    • 0

Microsoft Accessをお持ちであれば、MDBに読み込ませるのが手っ取り早いでしょう。



Accessで空のDBを作り、必要な数の文字列項目を持ったテーブルを作り、先頭の項目のみ「インディックス付き、重複を許さない」にしておきます。

次に、CSVファイルを作っておいたテーブルにインポートします。すると、先頭項目が重複を許していないので、重複したレコードが捨てられます。(捨てられた重複レコードは「インポートエラー」と言うテーブルに保存されます)

そして、そのテーブルをエクスポートしてCSV形式で保存すれば、目的を達する事が出来ます。
    • good
    • 0

DAOでも、ADO + Jet OLEでも、一応CSVは操作できるのですが、操作性を考えると、MDBなり、MSDEなりに一度読み込んで、RDB上でデータを加工してからCSVを再出力したほうが早いような気がします。


急がば回れ、ということで........。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!