如何使用awk在几个步骤中读取文本文件

时间:2015-11-13 15:56:07

标签: awk text-processing

我有一个这样的文本文件:

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

1 个答案:

答案 0 :(得分:0)

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

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

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

(当然我做了自己尝试;它有效。)