如何通过多个序列的乘法在文本文件中添加新列?

如何通过多个序列的乘法在文本文件中添加新列?

我有一个文本文件,有 4 列 300 行。我想添加第五列,其中第一百行将是 1*0.02, 2*0.02... 的乘法,第一百行是 2.2, 2.4 ...

0.02 
0.04
.
.
.
2           (in 100 lines)
2.2
2.4
.
.
.
12           (in 300 lines)

我的文本文件:

# "Frame" "Timestep" "WignerSeitz.interstitial_count" "WignerSeitz.vacancy_count"
0 0 0 0 
1 100 0 0 
2 200 0 0 
3 300 0 0 
.
.
98 9800 16 16 
99 9900 16 16 
100 10000 15 15
.
.
299 29900 48 48 
300 30000 55 55

预期输出:

# "Frame" "Timestep" "WignerSeitz.interstitial_count" "WignerSeitz.vacancy_count"
0 0 0 0 0
1 100 0 0 0.02 
2 200 0 0 0.04
3 300 0 0 0.06
.
.
98 9800 16 16 1.96
99 9900 16 16 1.98
100 10000 15 15 2
.
.
299 29900 48 48 11.8 
300 30000 55 55 12 

答案1

假设你的意思是在100之后,你需要为之后的每条记录添加0.2,使用awk你可以执行类似以下代码的操作:

awk -v x=2 '{if($1<101){print $0 FS ($1*0.02)}else{x=x+0.2; print $0 FS x}}' file.txt

在哪里:

-v用于让awk您知道您正在使用x具有初始值的变量2

$1<101只要第一列小于,就可以让代码的第一部分工作101

FS是静态变量,awk其中包含文件的字段分隔符。

然后你可以根据你的要求调整你的步骤。

答案2

据我了解,您想要第 5 列,计算结果为第 1 列乘以 0.2

这可以通过以下方式完成awk

 gawk '{printf "%s %.2f\n", $0,$1*0.02}'

答案3

您的规范和示例输出之间存在差异:从第 101 行到第 300 行,您想要的步长为 ,0.2但最后一行以12 - 结尾,这是不可能的。 200 个 0.2 的步长将产生“40”——这将构成42最后一行的 5 美元条目。如果这是真的,请尝试

$ awk '{print $0, ($1>100)*-18+$1*.02*(1+($1>100)*9)}' file
0 0 0 0  0
1 100 0 0  0.02
2 200 0 0  0.04
3 300 0 0  0.06
. 0
. 0
98 9800 16 16  1.96
99 9900 16 16  1.98
100 10000 15 15 2
101 10100 15 15 2.2
102 10200 15 15 2.4
. 0
199 19900 15 15 21.8
200 20000 15 15 22
201 20100 15 15 22.2
. 0
299 29900 48 48  41.8
300 30000 55 55 42

相关内容