根据文本文件中的比较读取、比较和替换文件

根据文本文件中的比较读取、比较和替换文件

您好,我需要指导来编写文件处理代码。

我有一个文件,其中 ~ 作为分隔符,每一行是关键字,是第一列。

  1. 首先我必须找到与 ^6999 匹配的行
  2. 然后转到使用 delimeter ~ 计数的 $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

相关内容