我有一个文本文件,test.txt
其内容如下:
a:b:c:u
e:f:g:h
i:j:k:l
m:n:v:w
q:r:s:t
我想编写一个 bash 脚本,从文本文件中提取数据,例如:
./run.sh test.txt 3 2 5 3
j:k
n:v
r:s
第一个参数是文件位置,第二个参数是我想要的第一行,第三个参数是该行的列,第四个参数是最后一行,最后一个参数是该行的列。
我开始编写这个脚本但却遇到了困难。
这是我的代码:
#!/bin/bash
if [ ! -f $1 ]; then
echo "The first parameter doesn't exist."
exit 2
elif [ "$#" -ne 5 ]; then
echo "Given parameter is less than five."
exit 1
else
i=0
while read line; do
test $((++i)) = $2 && cut -d':' -f$3
done
fi
我应该如何完成我的代码才能按照上面描述的方式工作?
答案1
你可以这样做:
#!/bin/bash
if [[ ! -f "$1" ]]; then
echo "oops, no such file"
exit 1
elif [[ $# -lt 5 ]]; then
echo "oops, not enough params"
exit 2
fi
sed -n "$2,$4p" "$1" | cut -d ':' -f$3-$5
笔记
sed -n
以安静模式呼叫sed
- 在我们要求之前不会打印"$2,$4p" "$1"
打印文件中从$2
到的行$4
$1
| cut -d ':' -f$3-$5
打印字段$3
包括$5
从任何sed
打印