テキストファイルの比較に基づくファイルの読み取り、比較、および置換

テキストファイルの比較に基づくファイルの読み取り、比較、および置換

こんにちは。ファイル処理コードの作成に関する指示が必要です。

~ が区切り文字で、各行がキーワードで、最初の列であるファイルがあります。

  1. まず、^6999に一致する行を見つける必要があります。
  2. 次に、区切り記号〜を使用して計算された$ 23フィールドに移動し、値0と比較します。
  3. 比較が真の場合、$ 24フィールドをGに置き換えます。
  4. これは同じファイルに書き込まれます。

私はawkを試しましたが、大容量ファイルに最適な方法でPythonまたはawkでコンテンツを作成するオプションは表示されません。

cat sampletext.dat |grep "^6999"|awk 'BEGIN{FS=OFS="~"}$23 -gt "0"{$24="G"}1' file.txt

6999~486854~30000000~500000000 ~0~~40844506~0~~0~3830~0~0~ EVELYN          ~242741644~Worldconference~Conference No.~20190104~20190104~7~11108~63.650000~63.65~0~0~~5~2~1~Seconds~11108~11160
~0~0.00~

答え1

その必要はありませんgrep。以下を使用して行をフィルタリングできますawk

例を提供していないのでテストできませんが、次のように動作します。

awk -F'~' '$1==6999 && $23>0 {$24="G"} {OFS=FS; print}' file.txt

同じファイルに書き込むには:

の場合は、GNU awk次のオプションを追加できます。

gawk -i inplace ...

それ以外の場合は一時ファイルが必要です。

awk ... > file.txt.tmp && mv file.txt.tmp file.txt

関連情報