[英]awk shell variable with field separator
我正在尝试创建一个哈希:
awk -F ';' '/DHCP/ {for(i=1; i<=5; i++) {getline; print $2$1}}' file \
| awk '{print $1"=>\"0000:0000:0000:1000::"$2"/64\""}'
返回以下内容:
host1=>"0000:0000:0000:1000::2/64"
host2=>"0000:0000:0000:1000::3/64"
host3=>"0000:0000:0000:1000::4/64"
host4=>"0000:0000:0000:1000::5/64"
host5=>"0000:0000:0000:1000::6/64"
一切都很好,但是请注意awk
的for循环中的5
。 如何将file
的总行数检索到for循环中?
我可以将wc -l
用作变量,但是如何使用shell变量和字段分隔符;
与awk一起?
这是file
样子:
#rest are dynamically assigned by DHCP server
2 ; host1 ; server1 ; ; ;
3 ; host2 ; sX ;;
4 ; host3 ; plic ;;
5 ; host4 ; cluc ;;
6 ; host6 ; blah ;;
awk -F'[ \t]*;[ \t]*' 'NR > 1 && NF > 1 { print $2"=>\"0000:0000:0000:1000::"$1"/64\"" }' file
我已经摆脱了对DHCP
的检查-我只是测试我们是否已超过第一行。 NF > 1
可以确保我们不对空白行进行任何操作。
我通过使用更精细的字段分隔符将awk
的两种用法组合为一种。 它匹配;
及其周围的空白。
awk -v IT=$(cat file1|wc -l) -F ';' '/DHCP/ {for(i=1; i<=IT; i++) {getline; print $2$1}}' file \\| awk '{print $1"=>\\"0000:0000:0000:1000::"$2"/64\\""}'
-v标志将外部变量传递给awk。
@Ed Morton on my system catting executed faster
(precise)cronkilla@localhost:/tmp$ time wc -l < file1
4
real 0m0.003s
user 0m0.001s
sys 0m0.002s
(precise)cronkilla@localhost:/tmp$ time cat file1 | wc -l
4
real 0m0.003s
user 0m0.001s
sys 0m0.001s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.