Получить конкретные данные в формате таблицы с использованием сценария bash

У меня есть текстовый файл, 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

Как мне заполнить код работайте, как описано выше?

2
задан 7 April 2017 в 00:32

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 напечатанных
3
ответ дан 22 May 2018 в 23:55

Вы могли бы так:

#!/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 напечатанных
3
ответ дан 18 July 2018 в 15:25

Вы могли бы так:

#!/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 напечатанных
3
ответ дан 24 July 2018 в 20:38

Вы могли бы так:

#!/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 напечатанных
3
ответ дан 31 July 2018 в 23:39

Вы могли бы так:

#!/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 напечатан
3
ответ дан 5 August 2018 в 05:33

Другие вопросы по тегам:

Похожие вопросы: