行のすべての値をN / Aに置き換えます

行のすべての値をN / Aに置き換えます

行のすべての値をN / Aに変更する方法を学びたいと思います。例えば。すべての列で、行77 132 140 142 155 156 157と175をN / Aに置き換える必要があります。たとえば、

RS,RPHG,LPHG,RITC
13.7801604545457,3.10785528409178,-38.443658181819,-8.25890473295385
-12.5663095454547,-33.8395547159089,-3.44606818181819,-24.8157817329538
35.1140204545463,-35.4853647159089,-33.8231881818192,26.6855902670459
-29.9357495454533,-34.5783047159075,-50.3323381818191,2.0808182670462

答え1

$ awk -F, -vOFS=, 'FNR==2 || FNR==4 { for (i=1;i<=NF;++i) $i="N/A" } 1' file
RS,RPHG,LPHG,RITC
N/A,N/A,N/A,N/A
-12.5663095454547,-33.8395547159089,-3.44606818181819,-24.8157817329538
N/A,N/A,N/A,N/A
-29.9357495454533,-34.5783047159075,-50.3323381818191,2.0808182670462

FNR現在のファイル内の現在のレコードのシリアル番号(「現在のファイルの行番号」)。 2つまたは4つの場合は、すべてのフィールド(1からNFフィールド数まで)を繰り返し、各フィールドを文字列に設定しますN/A1最後の末尾は、{ print }すべての行(変更または変更されていない)が印刷されるようにする短い書き込み方法です。

削除する必要があるすべての行番号(1行につき1つの番号)を含む添付ファイルがある場合:

awk -F, -vOFS=, 'FNR==NR { a[$1]; next }
                 FNR in a { for (i=1;i<=NF;++i) $i="N/A" } 1' lines file

lines行番号を持つファイルはどこにありますか?

ここでFNR==NR私たちが読んでいるなら最初文書(lines文書)。この場合、行番号を入力して配列に項目を作成し、a次の行に進みます。NR~であるみんなFNRこれまでに読み込んだ行数は、2番目のファイルから読み込みを開始する前の行数と同じです。

FNRそうでなければ私たちNRは読んでいます。第二ファイル(fileデータを含むファイル)。次に、現在の行番号が配列のキーであるかどうかをテストしa、そうであれば、前のようにすべてのフィールドを置き換えますN/A

答え2

1つの方法は次のとおりですsed

sed '
77c\
N/A,N/A,N/A,N/A
132c\
N/A,N/A,N/A,N/A
140c\
N/A,N/A,N/A,N/A
142c\
N/A,N/A,N/A,N/A
155c\
N/A,N/A,N/A,N/A
156c\
N/A,N/A,N/A,N/A
157c\
N/A,N/A,N/A,N/A
175c\
N/A,N/A,N/A,N/A
' input.csv

答え3

2行のフィルタリングを使用してawk実証します。

awk 'BEGIN { FS=","; OFS="," } { if( NR == 77 || NR == 132 ) {for( i=1; i<=NF; i++) {$NF="N/A"} }; print }' input

if関連するすべての行に対して、ステートメントにさらにオプションを追加するだけです。

答え4

使用awk:

awk -vOFS=, '{
  if (NR==77 || NR=132 || NR==140 || NR==142 || NR==155 || NR==156 || NR==157 || NR==175)
    $1=$2=$3=$4="N/A"
    print
}' input.csv

出力で新しいファイルを生成するには、シェルリダイレクト>演算子を使用します。

awk -vOFS=, '{
      if (NR==77 || NR=132 || NR==140 || NR==142 || NR==155 || NR==156 || NR==157 || NR==175)
        $1=$2=$3=$4="N/A"
        print
    }' input.csv > newfile.csv

関連情報