2017-06-22 126 views
0

我想使用bash脚本循环一个awk命令,并且我在awk命令的单引号内包含一个变量很难。我认为我应该完全用awk来完成这个任务,但是现在我对bash感觉更加舒适。在Bash中使用awk命令

#!/bin/bash 

index="1" 

while [ $index -le 13 ] 
do 

    awk "'"/^$index/ {print}"'" text.txt 

done 
+2

为什么不只是'grep'^ $ index“'?好像使用awk来达到这个目的...... – John3136

回答

0
awk '/'"$index"'/' text.txt 
# A lil play with the script part where you split the awk command 
# and sandwich the bash variable in between using double quotes 
# Note awk prints by default, so idiomatic awk omits the '{print}' too. 

应该做的,或者使用grep

grep "$index" text.txt # Mind the double quotes 

注:-le用于比较数字,所以你可能变化index="1"index=1

+0

''/'“$ index”'/''这是不好的做法,使用'-v varname =“somevalue”'而不是 –

1

使用标准方法 - 的awk设置-v选项/传递变量:

awk -v idx="$index" '$0 ~ "^"idx' text.txt 

在这里,我已经设置了可变idx为具有壳可变$index的值。在awk里面,我简单地使用idx作为awk变量。

$0 ~ "^"idx匹配记录以(^)开头的任何变量idx包含的匹配项;如果是的话,打印记录。