Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件bash排序的日期列表_Bash_List_Awk_Sed - Fatal编程技术网

从文件bash排序的日期列表

从文件bash排序的日期列表,bash,list,awk,sed,Bash,List,Awk,Sed,我试着从一份名单中找出他们所有人都是在特定日期之间出生的。该清单的格式如下: ./tool.sh --born-since <dateA> --born-until <dateB> -f <file> id | lastName | firstName | gender | birth | joinDate | IP |浏览器 用户使用此表单给出日期: ./tool.sh --born-since <dateA> --born-until <

我试着从一份名单中找出他们所有人都是在特定日期之间出生的。该清单的格式如下:

./tool.sh --born-since <dateA> --born-until <dateB> -f <file>
id | lastName | firstName | gender | birth | joinDate | IP |浏览器

用户使用此表单给出日期:

./tool.sh --born-since <dateA> --born-until <dateB> -f <file>
这是:

但我似乎找不到正确的结果。

在awk中:

数据:

$ cat foo  
id|lastName|firstName|gender|birthday|joinDate|IP|browser
||||2012-01-01|||
||||1970-01-01|||
该方案:

$ cat script.awk
NR==1 || $5 < until && $5 > since  # print the first record and when dates fit
如果日期为上述格式,则无需对其进行解析。

在awk中:

数据:

$ cat foo  
id|lastName|firstName|gender|birthday|joinDate|IP|browser
||||2012-01-01|||
||||1970-01-01|||
该方案:

$ cat script.awk
NR==1 || $5 < until && $5 > since  # print the first record and when dates fit

如果日期为上述格式,则无需对其进行解析。

以下示例显示了如何使用
getopt
解析选项:

#!/bin/bash

usage="usage: $0 --born-since DATE --born-until DATE -f FILE"

temp=$(getopt -o f: --long born-since:,born-until: -n "$0" -- "$@")
if [[ $? -ne 0 ]]; then
    echo "$usage"
    exit 1
fi

eval set -- "$temp"

while :; do
    case "$1" in
        -f) file=$2 ; shift 2;;
        --born-since) bs=$2; shift 2;;
        --born-until) bu=$2; shift 2;;
        --) shift; break;;
        *) echo "internal error"; exit 1;;
    esac
done

if [[ -z $file ]]; then
    echo "error: no -f option given"
    echo "$usage"
    exit 1
fi
# TODO: other validations

awk -v since="$bs" -v until="$bu" -F "|" 'since <= $5 && $5 <= until' "$file"
#/bin/bash
用法=“用法:$0--自日期出生--自日期出生-f文件”
temp=$(getopt-o f:--长期出生自:,出生至:-n“$0”--“$@”)
如果[$?-ne 0]];然后
回显“$usage”
出口1
fi
评估集--“$temp”
while:;做
案件“$1”
-f) 档案=$2;第二班;;
--出生日期)bs=2美元;第二班;;
--出生至)bu=2美元;第二班;;
--)转移;打破
*)回显“内部错误”;出口1;;
以撒
完成
如果[[-z$file]];然后
echo“错误:未给出-f选项”
回显“$usage”
出口1
fi
#TODO:其他验证

awk-v-since=“$bs”-v-until=“$bu”-F“|”since下面是一个示例,演示如何使用
getopt
解析选项:

#!/bin/bash

usage="usage: $0 --born-since DATE --born-until DATE -f FILE"

temp=$(getopt -o f: --long born-since:,born-until: -n "$0" -- "$@")
if [[ $? -ne 0 ]]; then
    echo "$usage"
    exit 1
fi

eval set -- "$temp"

while :; do
    case "$1" in
        -f) file=$2 ; shift 2;;
        --born-since) bs=$2; shift 2;;
        --born-until) bu=$2; shift 2;;
        --) shift; break;;
        *) echo "internal error"; exit 1;;
    esac
done

if [[ -z $file ]]; then
    echo "error: no -f option given"
    echo "$usage"
    exit 1
fi
# TODO: other validations

awk -v since="$bs" -v until="$bu" -F "|" 'since <= $5 && $5 <= until' "$file"
#/bin/bash
用法=“用法:$0--自日期出生--自日期出生-f文件”
temp=$(getopt-o f:--长期出生自:,出生至:-n“$0”--“$@”)
如果[$?-ne 0]];然后
回显“$usage”
出口1
fi
评估集--“$temp”
while:;做
案件“$1”
-f) 档案=$2;第二班;;
--出生日期)bs=2美元;第二班;;
--出生至)bu=2美元;第二班;;
--)转移;打破
*)回显“内部错误”;出口1;;
以撒
完成
如果[[-z$file]];然后
echo“错误:未给出-f选项”
回显“$usage”
出口1
fi
#TODO:其他验证
awk-v-since=“$bs”-v-until=“$bu”-F”|”自使用dateutils

dategrep
datesort
也能理解
--输入格式=STRING
(类似strftime的格式规范)

免责声明如果在同一行中有其他日期,则此项不起作用:p

使用dateutils

dategrep
datesort
也能理解
--输入格式=STRING
(类似strftime的格式规范)


免责声明如果同一行中有其他日期,则此操作无效:p

如果脚本只是从固定位置参数获取配置,则使用选项没有意义;只需使用
/tool.sh
。您的日期格式是什么?我的日期格式是1970-10-28,如上所示。如果您的脚本只是从固定位置参数获取配置,则使用这些选项没有意义;只需使用
/tool.sh
。您的日期格式是什么?我的日期格式是1970-10-28,如上所示,不建议使用
getopt
,而应该使用
getopts
(例如,请参见)?getopts只提供简短的选项名称哦,我看到有不同的版本,比如“GNU增强型
getopt
”它支持所有的
getopts
操作以及长选项。不要紧:)不是不受鼓励的,应该使用
getopts
(例如,请参见)?getopts只提供短选项名称哦,我看到有不同的版本-比如“GNU增强型
getopt
”,它支持
getopts
的所有功能以及长选项。不要紧:)但在程序上添加值之前和之后如何添加?那么script.awk是什么呢?但是你如何在程序上添加之前和之后的值呢?脚本是什么?
$ dategrep ">=1971-01-01&&<=2012-01-01"  < foo  | datesort
||||1971-01-01|||
||||2012-01-01|||