如何使用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