我有一个存储在变量中的分隔字符串。
date_str = 2017-04-03,2017-04-04,2017-04-05
如何使用linux
从这个分隔的字符串中取出min值预期输出为 - > 2017年4月3日
有人可以帮我这么做吗?
答案 0 :(得分:3)
短 gawk 方法:
awk -v d=$date_str 'BEGIN{split(d,a,","); asort(a); print a[1]}'
输出:
2017-04-03
split(d,a,",")
- 将“日期”字符串拆分为由,
asort(a)
- 对数组值进行排序
a[1]
- 表示排序数组的第一项
答案 1 :(得分:1)
使用awk:
$ awk -v d=$date_str ' # set variable to awk var d
BEGIN {
n=split(d,a,",") # split to a on ,
for(i=1;i<=n;i++) # iterate thru a
if(m==""||a[i]<m) # compare to current min m
m=a[i]
print m # after everything print min m
}'
2017-04-03
关于评论:
$ echo $date_str | awk -v RS=, 'NR==1||$0<m{m=$0}END{print m}'
2017-04-03
答案 2 :(得分:1)
使用此命令:
echo "date_str = 2017-04-03,2017-04-04,2017-04-05" | grep -Po "[0-9][^,]+" | sort -n | head -n 1
结果是:
2017-04-03
答案 3 :(得分:0)
如果您需要按日期排序
#!/bin/sh
STR='2017-04-03,2017-04-04,2017-04-05,2017-02-23,2017-04-25,2017-03-12,2016-08-25';
TS_ARR=();
IFS=',' read -r -a dates <<< $STR
for next_date in ${dates[@]}; do
date_ts=`date --date="${next_date}" +%s`
TS_ARR+=($date_ts)
done
IFS=$'\n' SORT_TS=($(sort <<< "${TS_ARR[*]}"))
echo "sorted: `date -d @${SORT_TS[0]} +%Y-%m-%d`"
应该显示sorted: 2016-08-25
答案 4 :(得分:0)
这是一个解决方案,将字符串从纪元转换为秒,对它们进行排序,抓取第一个并将其转换回字符串:
date_str="2017-04-03,2017-04-04,2017-04-05"
while IFS=, read -r -a arr || [[ -n $arr ]]; do
for str in ${arr[*]}; do
echo $(date -d "$str" +%s)
done
done <<<"$date_str" |
sort -n |
head -n 1 |
{ read -r earliest; date -d @"${earliest}" +%F ; }