繁体   English   中英

带命令行UNIX Shell脚本的AWK命令

[英]Awk command with command line unix shell script

awk -F, 'NR>1 && NR <10 {$8="abc";}1' OFS=, x.csv > y.csv

上面的命令将x.csv文件的第8列成功替换为第1到10行的字符串abc。 但是我想在shell脚本中使用命令行参数传递起始行号(即1)。 我怎样才能做到这一点?

我尝试编写脚本,但没有结果

echo "first parameter is $1"
awk -F, 'NR>$1 && NR <10 {$8="abc";}1' OFS=, x.csv > y.csv

使用-v选项传递变量:

例如:

awk -F, -v start=1 'NR>start && NR < 10 ' /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh

传递变量的另一种方法:

awk -F, 'NR>start && NR < 10 ' start=8 /etc/passwd
mail:x:8:8:mail:/var/mail:/bin/sh

还有另一种方式:

start=8; awk -F, 'NR>'$start' && NR < 10 ' /etc/passwd
mail:x:8:8:mail:/var/mail:/bin/sh

您可以使用-v从外壳脚本传递变量:

start=$1
awk -F, -v start=1 'NR>start && NR <10 {$8="abc";}1' OFS=, x.csv > y.csv

同样,您可以通过以下方式传递多个变量:

awk -v start=1 -v end=10 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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