我是 awk 编程的初学者。这个帖子是为了澄清一个疑问。我有这样的文件:
70 17 5 mb
71 18 6 ms
72 19 7 ml
73 20 8 mw
Run Code Online (Sandbox Code Playgroud)
其中第 4 列是一个字符串。我想在第 3 列中对第 4 列进行更改。例如:阅读第4列,如果$4=ms再$3=$3+1。
其实我不知道如何让程序读取字符串ms。
请帮我解决这个问题!
为此,您需要在 action block 中使用条件语句{}。
语法是 if ( expr ) statement
因此,要匹配第 4 列所在的条件,ms然后在匹配条件时重新分配第 3 列的值:
if ($4 == "ms") $3=$3+1
然后使用打印整行 print $0
所以完整的命令如下所示:
awk '{ if ($4 == "ms") $3=$3+1; print $0 }'
如果条件简单,您可以使用模式匹配来修改行。
假设test.txt包含示例数据:
cat test.txt
70 17 5 mb
71 18 6 ms
72 19 7 ml
73 20 8 mw
Run Code Online (Sandbox Code Playgroud)
让我们检查以下行及其输出:
awk '/ms$/ {$3++} {print}' test.txt
70 17 5 mb
71 18 7 ms
72 19 7 ml
73 20 8 mw
Run Code Online (Sandbox Code Playgroud)
awk 命令读取每一行的内容test.txt并运行 awk 脚本/ms$/ {$3++} {print}。脚本可以改写为:
/ms$/ {$3++}
{print}
Run Code Online (Sandbox Code Playgroud)
{}.
//.
ms$装置,每个行具有串ms在一行的末尾$(美元符号表示字符串应该是最后就行)。$3++将第三列的值加一。请注意该{print}操作将始终运行,因为此操作没有模式,但{$3++}只有在行尾找到字符串“ms”时,模式才会运行。此外,增量发生在打印之前,因此所有必要的修改都将按时执行。