
7 列の csv ファイルがあります。空のセルとセル間のスペースがあります。空のセルを NA に置き換え、余分なスペースを削除するにはどうすればよいでしょうか。よろしくお願いします。
私のファイルは次のようになりますが、コピーして貼り付けると歪んでしまうようです。
130070078,PPW0001,1,4,4HW ,2,15.61943874
120040039,PPW0002,0,0, ,0,0
120040043,PPW0003,1,3,3WE ,1,14.43394935
答え1
あなたの答え:
sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' > file2
最後のフィールドが空白の場合に「NA」を取得するには:
sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'> file2
以下も使用できます:
sed 's/,,/,NA,/g' file1 | tr -d ' ' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'
答え2
αғsнιη さんの回答は私にとっては役に立ちましたが、少し説明したいと思います。
私は次のようなことを試していました:
echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed 's/,,/,-,/g'
どの出力
1,-,2,-,,3,-,,4,-,,-,5,-,,-,,-,,-,,-,6
空のフィールドが繰り返されるため、最後のコンマは最初の置換の一部であり、次の必要な置換の開始であるため、2 つおきの空のフィールドが置換されるだけです。
次のようなことができます:
echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed -e 's/,,/,-,/g' -e 's/,,/,-,/g'
または
sed 's/,,/,-,/g;s/,,/,-,/g'
2 番目のコマンドは欠落しているセルを取得するため、すべてのセルが置き換えられますが、少し面倒です。
αғsнιη のコマンドは、ラベルとジャンプを使用して基本的に同じことを行いますが、それが可能であることは知りませんでした。
sed ':MYLABEL; s/,,/,-,/g; t MYLABEL;'
出力:
1,-,2,-,-,3,-,-,4,-,-,-,5,-,-,-,-,-,-,-,-,-,6
したがって、コマンドの最初の部分はラベルを作成します。
次に同じ置換を行います。
次に、前の置換コマンドが成功した場合にラベルにジャンプすることを意味する t コマンドがあります。