我有一个这样的文本文件:
R 3
W 1
W 2
W 3
R 2
R 5
W 3
W 6
R 2
R 5
当我在W
中看到$1
时,我想检查整个文件。 GAP
是一个初始整数(在本例中为6),我想将$2=GAP
替换为GAP+1
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
在第1步中,我想应用此修改:
R 3
W 1
W 2
W 3
R 2
R 5
W 3
W 7 <- 6+1
R 2
R 5
GAP
减少了一个,第二个W被看到了。
第二个W
; GAP=5;
R 3
W 1
W 2 <- second W
W 3
R 2
R 5 <- GAP
W 3
W 7
R 2
R 5 <- GAP
以同样的方式输出步骤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
第3步:
R 3
W 1
W 2
W 3 <- third W
R 2
R 6
W 3
W 7
R 2
R 6
第4步:
R 3
W 1
W 2
W 3
R 2
R 6
W 3 <- fourth W
W 7
R 2
R 6
第5步:最后W和最后一次输出
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
答案 0 :(得分:0)
你应该打破多次传球的想法。 首先,awk不是为了在同一个文件中进行多次传递而设计的; awk不是编辑。 其次,当你试图一次性解决问题时,问题会变得简单得多。
请注意,每行最多增加一次。
此外,只有当$2
值加上其上的W
行数大于或等于7时,才会增加一行。
这在AWK中非常简单。 由于这显然是家庭作业,我将把实施留给你。
(当然我做了自己尝试;它有效。)