带awk的内部管道

带awk的内部管道,awk,Awk,假设我有输入行: 输入: {x:y} abc det uyt llu 如何处理它,以获得预期的输出: 输出: {x:y} abc%det%uyt%llu 问题是如何将字段连接到行的末尾,并在该字符串中用% 分隔符是空间 我需要固定的第一部分{x:y}和字段2-end-of-line的实现管道您可以使用此awk: s='{x:y} abc det uyt llu' awk '{printf "%s%s", $1, OFS; for (i=2; i<=NF; i++) printf "%s

假设我有输入行:

输入:

{x:y} abc det uyt llu
如何处理它,以获得预期的输出:

输出:

{x:y} abc%det%uyt%llu
问题是如何将字段连接到行的末尾,并在该字符串中用% 分隔符是空间

我需要固定的第一部分{x:y}和字段2-end-of-line的实现管道

您可以使用此awk:

s='{x:y} abc det uyt llu'
awk '{printf "%s%s", $1, OFS; for (i=2; i<=NF; i++) printf "%s%s", $i, (i==NF)?RS:"%"}' <<< "$s"
{x:y} abc%det%uyt%llu
s='{x:y}abc det uyt llu'

awk'{printf“%s%s”,$1,of;for(i=2;i这里是另一个
awk

awk '{$1=$1;sub(/%/," ")}1' OFS="%" file

使用
OFS
$1=$1
将所有空格更改为
%
,然后将第一个
%
更改为空格。

第二个更容易理解:)@anubhava,Tnx+1或正确的方法,但IMHO
awk-vofs='''''''{$1=$1;sub(OFS,FS)}最好使用1'文件
,这样您就不会对OFS进行两次硬编码,不会对默认FS值的副本进行硬编码,也不会在使用OFS变量之前对其进行可视化设置。
awk '{$1=$1;sub(/%/," ")}1' OFS="%" file
echo '{x:y} abc det uyt llu' | awk '{$1=$1;sub(/%/," ")}1' OFS="%"
{x:y} abc%det%uyt%llu