使用“awk中的awk”

使用“awk中的awk”,awk,sed,Awk,Sed,如何在以下行中使用awk分隔:直到- cat list.txt domain.com/prod-1/name-1/imagename:1.0.71-b651706b950efc68857089d89ej3423423adfdsf domain.com/prod02/name-2asd-asdasd-11/imagename1:2.0.71-b651706b950efc68857089dsdfsdfsdfsdfsdf 我一次又一次地尝试,但没有成功 cat ist.txt |awk -F &

如何在以下行中使用awk分隔:直到-

cat list.txt
domain.com/prod-1/name-1/imagename:1.0.71-b651706b950efc68857089d89ej3423423adfdsf
domain.com/prod02/name-2asd-asdasd-11/imagename1:2.0.71-b651706b950efc68857089dsdfsdfsdfsdfsdf


我一次又一次地尝试,但没有成功

cat ist.txt |awk -F ":" {'a=$1; b=awk -F "-"{'print $2'};print a b '}
预期结果是

domain.com/prod-1/name-1/imagename:1.0.71
domain.com/prod02/name-2asd-asdasd-11/imagename1:2.0.71
使用split函数在awk中拆分字符串

使用split函数在awk中拆分字符串

与塞德

与塞德


有了你们展示的样品,你们可以试试下面的吗。用GNU awk编写和测试

说明:增加对以上内容的详细说明

awk '                         ##Starting awk program from here.
match($0,/:[^-]*/){           ##using match function to match everything from : to till - here.
  print substr($0,1,RSTART-1) substr($0,RSTART,RLENGTH) ##printing everything before RSTART and then printing matched regex value here.
}
' Input_file                  ##Mentioning Input_file name here.

有了你们展示的样品,你们可以试试下面的吗。用GNU awk编写和测试

说明:增加对以上内容的详细说明

awk '                         ##Starting awk program from here.
match($0,/:[^-]*/){           ##using match function to match everything from : to till - here.
  print substr($0,1,RSTART-1) substr($0,RSTART,RLENGTH) ##printing everything before RSTART and then printing matched regex value here.
}
' Input_file                  ##Mentioning Input_file name here.
在GNU awk上使用gensub函数:

在GNU awk上使用gensub函数:


它必须是awk吗?看起来sed会出色地完成这项工作:sed的/^\[^::]*:[^-]*-./\1/'。我不明白你说的“之前:直到-”是什么意思。从您的示例中,看起来您希望删除最后一个,以及后面的所有内容。对吗?“这有什么关系?这取决于@jared_mamrot,后面的文本中是否有多余的破折号。”。示例输入没有显示任何尾随破折号,但再次强调,文本似乎包含大量顺序的sdf字符,这表明在键盘上键入的是准随机输入,而不是真实的数据。我可以推荐一个更引人注目的标题吗?就awk中的awk引起人们的注意而言,它无论如何都不是搜索友好的,也没有描述问题所在:使用两个不同的字段分隔符拆分行。从awk中调用awk可能有一个非常罕见的应用程序,但事实并非如此。一般来说,从awk内部调用awk就像是在厨房里需要更多的存储空间,然后在现有的橱柜中而不是旁边建造一个新的橱柜。它必须是awk吗?看起来sed会出色地完成这项工作:sed的/^\[^::]*:[^-]*-./\1/'。我不明白你说的“之前:直到-”是什么意思。从您的示例中,看起来您希望删除最后一个,以及后面的所有内容。对吗?“这有什么关系?这取决于@jared_mamrot,后面的文本中是否有多余的破折号。”。示例输入没有显示任何尾随破折号,但再次强调,文本似乎包含大量顺序的sdf字符,这表明在键盘上键入的是准随机输入,而不是真实的数据。我可以推荐一个更引人注目的标题吗?就awk中的awk引起人们的注意而言,它无论如何都不是搜索友好的,也没有描述问题所在:使用两个不同的字段分隔符拆分行。从awk中调用awk可能有一个非常罕见的应用程序,但事实并非如此。一般来说,从awk中调用awk就像在厨房中需要更多的存储空间,然后在现有的文件柜中而不是在文件柜旁边构建一个新的文件柜。如果正则表达式是s/:[^-]*-./\1/-the.*如果尾部数据中有破折号,我会更高兴。诚然,示例数据不包含尾随破折号,但再次强调,文本似乎在序列中包含大量sdf字符,这表明在键盘上键入的是准随机的,而不是真实的数据。按照@JonathanLeffler的建议进行修改,以便我可以将其作为最佳答案。如果正则表达式是s/:[^-],我会更高兴*-如果尾部数据中有破折号,./\1/-the.*太贪婪了。诚然,示例数据不包含尾随破折号,但再次强调,文本似乎在序列中包含大量sdf字符,这表明在键盘上键入的是准随机的数据,而不是真实的数据。根据@JonathanLeffler的建议进行了修改,因此我可以将其作为最佳答案。
awk 'match($0,/:[^-]*/){print substr($0,1,RSTART-1) substr($0,RSTART,RLENGTH)}' Input_file
awk '                         ##Starting awk program from here.
match($0,/:[^-]*/){           ##using match function to match everything from : to till - here.
  print substr($0,1,RSTART-1) substr($0,RSTART,RLENGTH) ##printing everything before RSTART and then printing matched regex value here.
}
' Input_file                  ##Mentioning Input_file name here.
awk '{print gensub(/(^.*)(-.*$)/,"\\1","g")}' file
domain.com/prod-1/name-1/imagename:1.0.71
domain.com/prod02/name-2asd-asdasd-11/imagename1:2.0.71