ファイル内の特定の列を変更

例えば,以下のような特徴量を記述したファイルを考える.

feature.txt

1:0.725168 2:1 3:0.736906 4:0.707892
1:0.891752 2:0 3:0.684906 4:0.701177
1:0.707560 2:1 3:0.673946 4:0.646607
1:0.951198 2:0 3:0.815047 4:0.789534
1:0.965405 2:0 3:0.922424 4:0.800743
1:0.280533 2:0 3:0.433543 4:0.338383
1:0.222317 2:0 3:0.617440 4:0.677013
1:0.799581 2:0 3:0.827931 4:0.635637
1:0.915038 2:0 3:0.912492 4:0.825720
1:0.891752 2:0 3:0.844332 4:0.664702

ここで,4の特徴量だけ以下に変更したいとする.

feature4_alter.txt

4:0.766364
4:0.766364
4:0.577643
4:0.561196
4:0.577643
4:0.830104
4:0.612533
4:0.671443
4:0.671443
4:0.671443

こんな時,cutpasteを使えばコマンドラインで簡単に変更できる.

>> cut -d ' ' -f 1,2,3 feature.txt > tmp.txt
>> cat tmp.txt
1:0.725168 2:1 3:0.736906
1:0.891752 2:0 3:0.684906
1:0.707560 2:1 3:0.673946
1:0.951198 2:0 3:0.815047
1:0.965405 2:0 3:0.922424
1:0.280533 2:0 3:0.433543
1:0.222317 2:0 3:0.617440
1:0.799581 2:0 3:0.827931
1:0.915038 2:0 3:0.912492
1:0.891752 2:0 3:0.844332
>> paste -d ' ' tmp.txt feature_alter.txt > feature.txt
>> cat feature.txt
1:0.725168 2:1 3:0.736906 4:0.766364
1:0.891752 2:0 3:0.684906 4:0.766364
1:0.707560 2:1 3:0.673946 4:0.577643
1:0.951198 2:0 3:0.815047 4:0.561196
1:0.965405 2:0 3:0.922424 4:0.577643
1:0.280533 2:0 3:0.433543 4:0.830104
1:0.222317 2:0 3:0.617440 4:0.612533
1:0.799581 2:0 3:0.827931 4:0.671443
1:0.915038 2:0 3:0.912492 4:0.671443
1:0.891752 2:0 3:0.844332 4:0.671443

cutで列の切り取り,pasteでファイルの横結合ができる.

コマンドラインでいろいろできるんだなぁ.

これがめちゃ分かりやすい.
Linuxコマンドでテキストデータを自在に操る - orangain flavor