在每个命令后放置换行符

Ano*_*ous 6 bash scripts awk

如何在 shell 脚本的每个 awk 命令中实现回车或换行符,以便每个命令的输出与下一个命令的输出分开?

也许我需要更多的规范。我有两个 awk 命令,如下所列:

awk {print $1, $2}, awk 命令 1, 输出:

John Bender
Bohn Jender
Jen Bondher
Run Code Online (Sandbox Code Playgroud)

awk '{print $3, $4}',命令 2,输出:

AGE 21
AGE 420
AGE 2345678909876543234567890876543234567890876543
Run Code Online (Sandbox Code Playgroud)

当在 shell 脚本中组合并运行时./<testscript>.sh <textfile>,命令行显然输出:

John Bender
Bohn Jender
Jen Bondher
AGE 21
AGE 420
AGE 2345678909876543234567890876543234567890876543
Run Code Online (Sandbox Code Playgroud)

因为我想要换行附加 PER awk 命令,所以我希望输出看起来像:

John Bender
Bohn Jender
Jen Bondher

AGE 21
AGE 420
AGE 2345678909876543234567890876543234567890876543
Run Code Online (Sandbox Code Playgroud)

以前尝试附加“\n”的结果是:

John Bender

Bohn Jender

Jen Bondher

AGE 21

AGE 420

AGE 2345678909876543234567890876543234567890876543
Run Code Online (Sandbox Code Playgroud)

..这当然是不需要的。

hee*_*ayl 7

当您从 shell 脚本内部运行时,只需echo在每个awk命令之后添加,即在您想要获得单独输出的命令之间。 echo添加换行符。例如:

awk '{print $1 $2}' file.txt
echo
awk '{print $3, $4}' file.txt
Run Code Online (Sandbox Code Playgroud)

原答案:

附加printf "\n"在每个awk动作的末尾{}

printf "\n" 将打印一个换行符。

例子:

% awk '{print $1; printf "\n"}' <<<$'foo bar\nspam egg'
foo

spam
Run Code Online (Sandbox Code Playgroud)

  • @heemayl 的替代方法是在第一条语句的末尾使用带有 printf 的 END 块而不是 echo (2认同)