您好,我需要指导来编写文件处理代码。
我有一个文件,其中 ~ 作为分隔符,每一行是关键字,是第一列。
- 首先我必须找到与 ^6999 匹配的行
- 然后转到使用 delimeter ~ 计数的 $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