首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >轻量级bash脚本

轻量级bash脚本
EN

Stack Overflow用户
提问于 2014-08-21 23:13:29
回答 4查看 89关注 0票数 0

我有一个文本文件(test.dat),其中包含如下数据

代码语言:javascript
复制
time    value1 value2
00:09:20 10 20
--
time    value3 number4
00:09:20 30 40
--

我需要提取列value1、value2、value3和number4中的值,并输出如下

代码语言:javascript
复制
10:20:30:40

cat test.dat |
grep -A 1 -w 'value1\|value2\|value3\|number4' |
sed 's/--/\n/g' |
sed '/^$/d' |
awk 'NR%2==0' |
awk '{$1=""; print}' |
tr -d "\n"|
awk '{print $1 ":" $2 ":" $3 ":" $4}'

但这需要花费大量的时间。有没有一种轻量级的方法来获得这种方法。

EN

回答 4

Stack Overflow用户

发布于 2014-08-21 23:55:56

代码语言:javascript
复制
$ awk -v OFS=: 'NR%3 == 2 {print $2, $3}' test.dat | paste -sd:
10:20:30:40
票数 0
EN

Stack Overflow用户

发布于 2014-08-22 00:00:21

代码语言:javascript
复制
sed -nE 's/[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}:]]+) ([[:digit:]]+)/\1:\2/p'

将执行您所要求的操作,然后您需要将结果通过管道传送到

代码语言:javascript
复制
tr "\n" ":"
票数 0
EN

Stack Overflow用户

发布于 2014-08-22 00:31:49

为什么使用sed或awk?如果文件格式始终相同,则可以使用:

代码语言:javascript
复制
while read line; do
    if [ "${line:0:4}" == "time" ]; then
        read number
        outText="${outText}$(echo "$number"|cut -d' ' -f2-|tr ' ' ':'):"
    fi
done<test.dat
outText=${outText%:} # Remove last unuseful :
echo "$outText"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25429957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档