E列またはF列が空の場合、または値が0の場合は、B列をコピーします。

E列またはF列が空の場合、または値が0の場合は、B列をコピーします。

bashコマンドとawkコマンドやその他のコマンドを使用して変更したいCSVファイルがあります。

たとえば、E列またはF列が空の場合、または値が0の場合は、B列をコピーしたいと思います。

AAAA, BBBB, CCCC, DDDD, EEEE, FFFF
11    12    13    14    15    0

出力:

AAAA, BBBB, CCCC, DDDD, EEEE, FFFF
11    12    13    14    15    12

どうすればいいですか?

アップデート:cat user.csvを実行しましたが、これが表示されました。

740.58,0,740.58,0,740.58
2452.84,0,2452.84,0,2452.84
898.23,0,898.23,0,898.23
227.57,0,227.57,0,227.57
735.02,0,735.02,0,735.02
640.5,0,640.5,0,640.5
469.31,0,469.31,0,469.31
3744.25,0,3744.25,0,3744.25
462.15,0,462.15,0,462.15
198.79,0,198.79,0,198.79
437.58,0,437.58,0,437.58
515.44,0,515.44,0,515.44

LibreOfficeではこんな感じ.

ここに画像の説明を入力してください。

だから私がしたいのは、C列の情報をB列に変更することです。 B列のすべての情報が0であれば、0でなければ何も変更しないで説明します。

申し訳ありませんが、私の英語力はあまり良くありません:c

アップデート:ステートメントが次の場合:

if [[ $2 == 0 ]]; then echo "列 3 を列 2 にコピー" awk -F , 'BEGIN { OFS = FS } $2 == 0 { $2 = $3 } 1' user.csv > user1.csv else if [[ $4 == 0 ]] ; then echo "列 5 を 4 にコピー" awk -F , 'BEGIN { OFS = FS } $4 == 0 { $4 = $5 }' csv > user1.csv fi fi

ベストアンサー1

gawk '
  BEGIN {FS = OFS = "\t"}
  !$5 {$5 = $2}
  !$6 {$6 = $2}
  1
' input.tsv

出力が正しい場合はもう一度実行してください。gawk -i inplace '...' input.tsv

おすすめ記事