繁体   English   中英

带字段分隔符的awk shell变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM