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