Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用awk分几步读取文本文件_Awk_Text Processing - Fatal编程技术网

如何使用awk分几步读取文本文件

如何使用awk分几步读取文本文件,awk,text-processing,Awk,Text Processing,我有这样一个文本文件: R 3 W 1 W 2 W 3 R 2 R 5 W 3 W 6 R 2 R 5 当我在$1中看到W时,我想检查整个文件GAP是一个初始整数(在本例中为6),我想用GAP+1替换$2=GAP first W; GAP=6; R 3 W 1 <- first W W 2 W 3 R 2 R 5 W 3 W 6 <- GAP R 2 R 5 同样,步骤2的输出为: R 3 W 1 W 2 W 3 R 2 R 6 <- 5+1 W 3 W 7 R 2 R 6

我有这样一个文本文件:

R 3
W 1
W 2
W 3
R 2
R 5
W 3
W 6
R 2
R 5
当我在
$1
中看到
W
时,我想检查整个文件
GAP
是一个初始整数(在本例中为6),我想用
GAP+1
替换
$2=GAP

first W; GAP=6;
R 3
W 1 <- first W
W 2
W 3
R 2
R 5
W 3
W 6 <- GAP
R 2
R 5
同样,步骤2的输出为:

R 3
W 1
W 2
W 3
R 2
R 6 <- 5+1
W 3
W 7
R 2
R 6 <- 5+1
我已尝试此代码,但无法正常工作:

awk 'BEGIN{GAP=6}{if($1=="W") {if($2==GAP) $2=GAP+1; GAP--;} print $0}' file.txt

你应该打破多次传球的想法。 首先,awk的设计不是为了在同一个文件上进行多次传递;awk不是一个编辑。 第二,当你试图一次解决问题时,问题会变得简单得多

请注意,每行最多递增一次。 此外,只有当一行的
$2
值加上其上方的
W
行数大于或等于7时,该行才会递增

这在AWK中非常简单。 由于这显然是一个家庭作业,我将把实施交给你


(当然我自己也试过了;而且很有效。)

建议:如果文件很小,可以将值保留在一个(或两个)数组中,并通过迭代操作数组元素上的逻辑,直到完成为止。
R 3
W 1
W 2
W 3
R 2
R 6 <- 5+1
W 3
W 7
R 2
R 6 <- 5+1
R 3
W 1
W 2
W 3 <- third W
R 2
R 6
W 3
W 7
R 2
R 6
R 3
W 1
W 2
W 3
R 2
R 6
W 3 <- fourth W
W 7
R 2
R 6
R 3
W 1
W 2
W 3
R 2
R 6
W 3
W 7 <- fifth W
R 3 <- 2+1
R 6
R 3
W 1
W 2
W 3
R 2
R 6
W 3
W 7
R 3
R 6
awk 'BEGIN{GAP=6}{if($1=="W") {if($2==GAP) $2=GAP+1; GAP--;} print $0}' file.txt