【发布时间】:2016-03-24 19:50:19
【问题描述】:
我有一个位置参数 A-B,它是间隔,我需要使用这个间隔来打印文件中的行。在示例 $./File.sh 5-10 中,我需要我的脚本来打印 5 到 10 之间的文件行。
【问题讨论】:
-
你有没有为此尝试过?你知道如何(忽略你的论点)打印文件中的行间隔吗?
标签: bash shell unix command-line sh
我有一个位置参数 A-B,它是间隔,我需要使用这个间隔来打印文件中的行。在示例 $./File.sh 5-10 中,我需要我的脚本来打印 5 到 10 之间的文件行。
【问题讨论】:
标签: bash shell unix command-line sh
假设您有一个包含 20 行的文件,并且您想要打印第 5-15 行...下面的命令是您如何完成此操作的。
sed -n '5,15p' {name_of_file}
将 {name_of_file} 替换为实际文件名。
现在我不打算写出你的整个脚本,但你可以拿 1 美元 (5-15) 并解析该数据……例如。
fieldOne=$(echo $1 | awk -F"-" '{print $1}') #This will equal 5
fieldTwo=$(echo $1 | awk -F"-" '{print $2}') #This will equal 15
【讨论】:
awk "${1/-/,}p" …(用逗号替换破折号;添加p)。不过,总的来说,最好假设您已经忘记了如何编写范围并且应该验证它。
符合 POSIX 的解决方案:使用内置的 read 命令分割范围。
IFS=- read a b <<EOF
$1
EOF
在bash 中,您有一些更简单的选择。
IFS=- read a b <<< "$1"[[ $1 =~ ^(.*)-(.*)$ ]] && a=${BASH_REMATCH[1]} b=${BASH_REMATCH[2]}这些都不涉及派生新进程来运行外部程序。
【讨论】: