我想通过冒号使用awk拆分变量,但只使用最后一个变量。
从这个输入:
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
我想要以下输出:
protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=22
这是我现在的awk命令:
awk '/^ACCEPT/ {print "protocol=",$2, "source=",$4,"destination=",$5,"port=",$7}"
产生:
protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=dpt:22
但我想从22
中获取$7
而不是dpt:22
我尝试过使用awk的字段分隔符,但我可以弄清楚如何使它只适用于单个变量
答案 0 :(得分:4)
只需调整FS以包含:
$ echo 'ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22' |
awk '/^ACCEPT/{printf("protocol=%s source=%s destination=%s port=%s\n", $2,$4,$5,$8)}
' FS='[ :]*'
protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=22
您可能需要添加标签,然后执行FS='[ :\t]*'
答案 1 :(得分:2)
您可以使用正则表达式在awk
中定义自定义字段分隔符。
some_command | awk -F '[[:blank:]:]+' '/^ACCEPT/{
printf "protocol=%s source=%s destination=%s port=%s\n", $2, $4, $5, $NF}'
protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=22
-F '[[:blank:]:]+'
将输入字段分隔符设置为空格或冒号之一。
答案 2 :(得分:1)
使用以下 awk 方法:
awk '{ printf "protocol=%s source=%s destination=%s port=%s\n",$2,$4,$5,substr($7,5) }' file
但如果最后一个字段的动态前缀长度,您可以应用gsub()
函数删除非数字字符:
awk '{ gsub(/^[^0-9]+/,"",$7); printf "protocol=%s source=%s destination=%s port=%s\n",$2,$4,$5,$7 }' file
答案 3 :(得分:1)
awk 命令
中的轻微修改$ awk '/^ACCEPT/ {gsub(/[^0-9]/,"",$7); print "protocol="$2, "source="$4,"destination="$5,"port="$7}' file
protocol=tcp source=0.0.0.0/0 destination=0.0.0.0/0 port=22
gsub(/[^0-9]/,"",$7);
将取消$7
答案 4 :(得分:0)
awk有一个awk '/^ACCEPT/ {
port="???"
for (i=6; i<=NF; i++) {
if (split($i, opt, ":")==2 && opt[1]=="dpt") {
port=opt[2]
}
}
print "protocol=" $2, "source=" $4, "destination=" $5, "port=" port
}'
函数,使用指定的分隔符regexp(参数3)将字符串(参数1)分解为字段数组(参数2)。
以下awk程序将扫描所有iptables选项(字段6到行的最后一个字段),而不是依赖于dpt:###是第7个字段。
images:[
['img1',false,[1,2,3],1,0],//4th one is zindex
['img2',false,[2,3,1],2,0],
['img3',false,[4,5],3,10],
['img4',false,[1,2,3],4,0],
['img5',false,[2,3,1],5,0],
['img6',false,[5],6,0],
['img7',false,[1,2,3],7,0],
['img8',false,[2,3,1],8,0],
['img9',false,[5],9,0],
['img10',false,[1,2,3],10,0],
['img11',false,[2],11,10],
['img12',false,[5],12,10]
],