awk使用分隔符连接n个字段

awk使用分隔符连接n个字段,awk,Awk,如果我不知道自己有多少个领域,我如何使用awk加入各个领域?例如,给定输入字符串 aaa/bbb/ccc/ddd/eee 我使用-F'/'作为分隔符,对aaa,bbb,ccc,ddd,eee(更改,删除…)进行一些操作,然后我想将其合并回打印行 AAA/bbb/ddd/e 谢谢 。。。考虑到我不知道我有多少 啊,但是你知道你有多少。或者,如果你继续读下去,你很快就会看到:-) 在给您一个要处理的记录之前,awk将NF变量设置为该记录中的字段数,您可以使用for循环来处理它们(注释不是脚本的一

如果我不知道自己有多少个领域,我如何使用awk加入各个领域?例如,给定输入字符串

aaa/bbb/ccc/ddd/eee
我使用
-F'/'
作为分隔符,对
aaa
bbb
ccc
ddd
eee
(更改,删除…)进行一些操作,然后我想将其合并回打印行

AAA/bbb/ddd/e
谢谢

。。。考虑到我不知道我有多少

啊,但是你知道你有多少。或者,如果你继续读下去,你很快就会看到:-)

在给您一个要处理的记录之前,
awk
NF
变量设置为该记录中的字段数,您可以使用
for
循环来处理它们(注释不是脚本的一部分,我只是把它们放在那里解释一下):

$echo pax/is/a/love/god | awk-F/'{
格苏布(/上帝/,“狗”,5美元);#帕克斯,是,爱,狗
$4=“”;#帕克斯是一只狗
$6=$5;#帕克斯,是,一只,一条狗,一条狗
$5=“狂犬病”#帕克斯,是,一只,狂犬病,狗
打印F$1;#输出“pax”
对于(i=2;i
awk-F'/''{#我建议将它们添加到数组中,如:

#对于(i=1;i,下面将向您展示如何处理每个字段并对其执行一些示例操作

使用输出字段分隔符OFS
的唯一警告是,“已删除”字段仍将具有分隔符,如下面的输出所示;但是,如果您可以接受该分隔符,则代码会简单得多

awk '
  BEGIN{FS=OFS="/"}
  {
    for(i=1;i<=NF;i++){
      if($i == "aaa")
        $i=toupper($i)
      else if($i ~ /c/)
        $i=""
      else if($i ~ /^eee$/)
        $i="e"
    }
  }1' <<<'aaa/bbb/ccc/ddd/eee'

这可能适合您:

echo "aaa/bbb/ccc/ddd/eee" |
awk 'BEGIN{FS=OFS="/"}{sub(/../,"",$4);NF=4;print}'
aaa/bbb/ccc/d
要删除不在末尾的字段,请使用函数来洗牌这些值:

echo "aaa/bbb/ccc/ddd/eee" |
awk 'func d(n){for(x=n;x<=NF-1;x++){y=x+1;$x=$y}NF--};BEGIN{FS=OFS="/"}{d(2);print}'
aaa/ccc/ddd/eee
echo“aaa/bbb/ccc/ddd/eee”|

awk'func d(n){for(x=n;xWell,它错过了最后一行新行。一个相当小的点,@Zsolt,很容易修复,但答案的核心是操纵。是的,很小,可以很容易修复,但它会导致大文件的问题:-)加上1表示“答案的核心”,唯一的问题是
for(A中的i)
没有指定顺序
AAA/bbb//ddd/e
echo "aaa/bbb/ccc/ddd/eee" |
awk 'BEGIN{FS=OFS="/"}{sub(/../,"",$4);NF=4;print}'
aaa/bbb/ccc/d
echo "aaa/bbb/ccc/ddd/eee" |
awk 'func d(n){for(x=n;x<=NF-1;x++){y=x+1;$x=$y}NF--};BEGIN{FS=OFS="/"}{d(2);print}'
aaa/ccc/ddd/eee