使用 bash 脚本以表格格式获取特定数据

使用 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

我应该如何完成我的代码才能按照上面描述的方式工作?

答案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打印

相关内容