こんにちは。ファイル処理コードの作成に関する指示が必要です。
~ が区切り文字で、各行がキーワードで、最初の列であるファイルがあります。
- まず、^6999に一致する行を見つける必要があります。
- 次に、区切り記号〜を使用して計算された$ 23フィールドに移動し、値0と比較します。
- 比較が真の場合、$ 24フィールドをGに置き換えます。
- これは同じファイルに書き込まれます。
私は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