Linuxコマンドでcsvファイルの各列を洗って重複する単語があれば片方を削除したいです。
考えているのは各行ループの中で、cut -d ,
等でカンマを区切り文字として重複単語を見つけ、削除したいです。
具体的には以下のような感じです。
kingyo,panda,pig,pig neko,inu,sakana,penguin sea,see,sea,mountain taro,taro,taro1,taro2 kanji,hiragana,katakana,eigo,kanji
を
kingyo,panda,pig neko,inu,sakana,penguin sea,see,mountain taro,taro1,taro2 kanji,hiragana,katakana,eigo
のように変換したいです。
何か解決策はございますでしょうか?
【以降追記】
解凍していただいた皆様、ありがとうございます。
追加で各単語の行末についている数字を削除する必要が出てきたので以下のようにdatamash transpose
を用いてループの中で一行ずつやりました。
$1に元のファイル、$2に書き出し先のファイル名を指定しています。
shell
1while read row; do 2 echo $row | 3 4 sed -e 's/,/\t/g' | # , =>tab 5 datamash transpose | # transpose 6 7 # 行末についている1〜2桁の数字を削除 8 sed -e "s/[0-9]*$//" | 9 sed -e "s/[0-9][0-9]*$//" | 10 11 sort -u | # 重複行削除 12 tr '\n' ',' | # 改行をカンマにして一列へ戻す 13 sed "s/^,//g" >> $2 # 行頭のカンマ削除 14done < $1
こちらのやり方で何かよくない点等ありましたらご意見いただけるとありがたいです。
P.S. このデータは元データの5カラム目以降をcut
して作業しています。作業後元のファイルに結合する必要がありますが、paste
コマンドで結合したところ数カ所で一つのセルに複数の行・列が格納されてしまいました。なので元のデータを切り取って作業するのではなく元のデータのままでsed
コマンドなどを「〜列目以降のモノに対してだけ」使いたいと思ってます。これに関して何か良い方法はありますか?
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。