我有大量的文字输出,其中包括以下几行:
sending:WHATIWANT:output
我如何使用awk
进行制作,以便此输出仅包含每行WHATIWANT
?
编辑:WHATIWANT
之前和之后的文字数量不断变化,因此awk -F: '{print $2}'
之类的内容并不总是有效
答案 0 :(得分:0)
根据你在评论中提到的内容,应该这样做:
perl -n -e'/sending:([^:]+):output/ && print $1' input_file
逐行运行一个简单的正则表达式匹配,捕获有趣的部分然后打印它。它假定WHATIWANT
不包含字符:
如果由于某种原因你绝对必须使用awk(1)
,那么我认为你没有太多选择,只能这样做:
awk -F: '{ for (i = 2; i < NF; i++) if ($(i-1) == "sending" && $(i+1) == "output") print $i }' input_file
它基本上将每一行拆分为:
并迭代每个字段,比较左侧和右侧字段,直到找到介于sending
和output
之间的字段。同样,它假设WHATIWANT
没有:
答案 1 :(得分:0)
你不能只使用sed吗?
echo "asfasfdsf__sending:WHATIWANT:output__asdfadas" | sed -n 's/.*sending\:\([a-zA-Z0-9]*\)\:output.*/\1/p'
给你“WHATIWANT”