我有一个/tmp/a.txt
包含以下内容的文件:
1
2
3
4
5
使用AWK
,我想提示用户指定以下任何格式的范围并打印匹配的行。
逗号分隔
1,2,3
空格分隔
1 2 3
并在使用范围内 -
1-3
预期输出:
1
2
3
下面是用于捕获用户输入的示例 awk 命令,我应该在此处放置什么以获得所需的输出。
awk 'BEGIN { printf "Enter the range: " ; getline name < "-" }{?}' /tmp/a.txt
你可以使用这个
awk
命令:解释:
printf "Enter the range: " ; getline r < "-";
从问题中复制(将用户输入读入变量r
)split(r,a,"[ ,]")
在分隔符空格和逗号处拆分输入并将它们写入数组a
。for (i in a)
对于每一行 awk 进程,它在数组中循环a
split(a[i],b,"-")
中的每个元素在a
分隔符处再次拆分,-
然后将范围保存在数组中b
。if(a[i]==NR||(b[2]!=""&&b[1]<=NR&&b[2]>=NR))
如果awk
当前正在处理的行号在数组中,a
或者如果行号在数组中的两个数字之间b
...{print}
...打印该行。您还可以使用组合输入,例如
NR
如果您希望行号 ( ) 与输入的范围、整行的 ($0
) 或第一个字段的 ( ) 值匹配,则尚不清楚$1
...尝试并更改
$1
为$0
或NR
。