我试图让第三列,特别是想只能提取日期,下面就是数据的模样。
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open dpc-syslog-2019.02.04 HJNqQMd_T1qbyHM5HEHGUw 5 1 46559620 0 37.1gb 18.5gb
green open syslog-2019.06.23 Q73bPEXUQz64Pt7eh-a3pQ 5 1 4930 0 2.1mb 1mb
green open .monitoring-kibana-6-2019.02.04 _5_68NpKStWo3dBFOXZUlw 1 1 8749 0 5mb 2.5mb
green open syslog-2019.04.11 e45heIjRTGqO_KHS8He0Ag 5 1 14 0 109kb 54.5kb
green open syslog-2019.02.04 -tshSKMAR8GKYnY2KSqn_Q 5 1 19236875 0 5gb 2.5gb
green open syslog-2019.05.04 cTgQAcT-QkKklhsKucvotA 5 1 14 0 141kb 70.5kb
green open syslog-2019.04.19 CXzRauBZTWu64HB8KTCj5A 5 1 14 0 108.9kb 54.4kb
green open syslog-2019.03.02 ap9TDVkIQeGRbTQ9Qpzarg 5 1 14 0 108.3kb 54.1kb
green open syslog-2019.03.03 uNcOfR8gSfWYWJgh1Bp9WQ 5 1 14 0 107.6kb 53.8kb
下面是我试图让时间,但我认为,在我下面的命令语法,它有一些字符串,以及哪个我想删除。
[root@host1 ~]# curl -s -XGET http://127.0.0.1:9200/_cat/indices?v | awk '{print $3}'|cut -d. -f1-3 | sed 's/\.//g' | awk -F- '{print $NF}' | head
index
kibana
20190204
20190623
20190204
20190411
20190204
20190504
20190419
20190302
20190303
20190204
20190623
20190204
20190411
20190204
20190504
20190419
20190302
20190303
话说,我想只有数字,只是想跳过删除任何字符的字符串就像上面的代码index
的。
我希望这可以更好地,并用AWK或SED或者grep的只是周围的方式来实现摆弄干净完成。
谢谢你的帮助。
另一个GNU AWK方式:
awk '$3~/[0-9]{4}/{print gensub(/.*-|[^0-9]*/, "", "g", $3)}'
您可以微调在不同的情况下,正则表达式的基础,基本上准确性权衡与简洁。
和GNU,但解决的办法;
sed -E '/(\S*\s+){2}.*[0-9]{4}(\.[0-9]{2}){2}/!d; s/(\S*\s+){2}(\S*\s+).*/\2/g; s/.*-|[^0-9]*//g'
这是一种方式:
$ awk '$3~/[0-9]{4}(\.[0-9]{2}){2}$/{gsub(/^.*-|[^0-9]/,"",$3);print $3}' file
20190204
20190623
20190204
...
解释:
$ awk '$3~/[0-9]{4}(\.[0-9]{2}){2}$/ { # picking records on regex
gsub(/^.*-|[^0-9]/,"",$3) # remove all before last dash and non-digits
print $3 # output
}' file
$ awk 'sub(/.*-/,"",$3){gsub(/\./,"",$3); print $3}' file
20190204
20190623
20190204
20190411
20190204
20190504
20190419
20190302
20190303
随着qazxsw POI,qazxsw POI和POI qazxsw:
tail
您可以尝试的Perl一行代码也
cut
要么
tr
由于头不匹配的日期模式,在线路号码检查($。)也被去除。
<infile tail -n+2 | tr -s ' ' | cut -d' ' -f3 | rev | cut -d- -f1 | rev | tr -d .
与你的投入
perl -lane ' if($.>1) { $F[2]=~/.*\-(\d+).(\d+).(\d+)/ and print "$1$2$3" } '
可否请您尝试以下操作。
perl -lane ' if($.>1) { $F[2]=~/.*\-(\S+)/ and ($t=$1)=~tr/\.//d and print $t } '
要么
perl -lane ' $F[2]=~/.*\-(\d+).(\d+).(\d+)/ and print "$1$2$3" '
这可能会为你工作(GNU SED):
$ cat pygo.txt
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open dpc-syslog-2019.02.04 HJNqQMd_T1qbyHM5HEHGUw 5 1 46559620 0 37.1gb 18.5gb
green open syslog-2019.06.23 Q73bPEXUQz64Pt7eh-a3pQ 5 1 4930 0 2.1mb 1mb
green open .monitoring-kibana-6-2019.02.04 _5_68NpKStWo3dBFOXZUlw 1 1 8749 0 5mb 2.5mb
green open syslog-2019.04.11 e45heIjRTGqO_KHS8He0Ag 5 1 14 0 109kb 54.5kb
green open syslog-2019.02.04 -tshSKMAR8GKYnY2KSqn_Q 5 1 19236875 0 5gb 2.5gb
green open syslog-2019.05.04 cTgQAcT-QkKklhsKucvotA 5 1 14 0 141kb 70.5kb
green open syslog-2019.04.19 CXzRauBZTWu64HB8KTCj5A 5 1 14 0 108.9kb 54.4kb
green open syslog-2019.03.02 ap9TDVkIQeGRbTQ9Qpzarg 5 1 14 0 108.3kb 54.1kb
green open syslog-2019.03.03 uNcOfR8gSfWYWJgh1Bp9WQ 5 1 14 0 107.6kb 53.8kb
$ perl -lane ' if($.>1) { $F[2]=~/.*\-(\S+)/ and ($t=$1)=~tr/\.//d and print $t } ' pygo.txt
20190204
20190623
20190204
20190411
20190204
20190504
20190419
20190302
20190303
$
在第三列模式匹配,如果匹配成功,只有打印。