У меня есть текстовый файл, 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
Как мне заполнить код работайте, как описано выше?
Вы могли бы так:
#!/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
Вы могли бы так:
#!/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
Вы могли бы так:
#!/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
Вы могли бы так:
#!/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
Вы могли бы так:
#!/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
напечатан