回答編集履歴

2

質問の追加に伴う追記

2019/11/22 14:43

投稿

KojiDoi
KojiDoi

スコア13671

test CHANGED
@@ -25,3 +25,57 @@
25
25
  単に各項の数字を削除したいだけなのにわざわざ行列の入れ替えを行なうとは、あまりに無駄すぎると思います。
26
26
 
27
27
  sedを使うなら、`s/[0-9]*,/,/g; s/[0-9]*$//;`で済みます。
28
+
29
+
30
+
31
+ 追加事項に対応してみたスクリプト。さすがにワンライナーは辛くなってきたのでスクリプトファイルにしてみます。
32
+
33
+ ```
34
+
35
+ $ cat coluniq.pl
36
+
37
+ while(<>){
38
+
39
+ chomp;
40
+
41
+ my %d;
42
+
43
+ my @F=split(/,/, $_);
44
+
45
+ my($from, $to) = (4, $#F);
46
+
47
+ foreach my $x (@F[$from..$to]){
48
+
49
+ $x=~s/[0-9]+$//;
50
+
51
+ $d{$x}=0;
52
+
53
+ }
54
+
55
+ print join(",", @F[0..($from-1)], keys %d);
56
+
57
+ }
58
+
59
+
60
+
61
+ $ cat in.csv
62
+
63
+ 1,1,1,1,kingyo,panda,pig,pig
64
+
65
+ 1,1,1,1,neko,inu,sakana,penguin
66
+
67
+ 1,1,1,1,sea,see,sea,mountain
68
+
69
+ 1,1,1,1,taro,taro,taro1,taro2
70
+
71
+
72
+
73
+ $ perl ~/work/coluniq.pl in.csv
74
+
75
+ 1,1,1,1,panda,kingyo,pig
76
+
77
+ 1,1,1,1,inu,penguin,sakana,neko
78
+
79
+ 1,1,1,1,see,mountain,sea
80
+
81
+ ```

1

追記

2019/11/22 14:43

投稿

KojiDoi
KojiDoi

スコア13671

test CHANGED
@@ -15,3 +15,13 @@
15
15
  perl -F, -anle 'my %x; print join(",", grep {!$x{$_}++} @F)' file.csv
16
16
 
17
17
  ```
18
+
19
+
20
+
21
+ 質問の追加に伴う追記
22
+
23
+
24
+
25
+ 単に各項の数字を削除したいだけなのにわざわざ行列の入れ替えを行なうとは、あまりに無駄すぎると思います。
26
+
27
+ sedを使うなら、`s/[0-9]*,/,/g; s/[0-9]*$//;`で済みます。