我有一个文本文件(test.dat),其中包含如下数据
time value1 value2
00:09:20 10 20
--
time value3 number4
00:09:20 30 40
--我需要提取列value1、value2、value3和number4中的值,并输出如下
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}'但这需要花费大量的时间。有没有一种轻量级的方法来获得这种方法。
发布于 2014-08-21 23:55:56
$ awk -v OFS=: 'NR%3 == 2 {print $2, $3}' test.dat | paste -sd:
10:20:30:40发布于 2014-08-22 00:00:21
sed -nE 's/[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}:]]+) ([[:digit:]]+)/\1:\2/p'将执行您所要求的操作,然后您需要将结果通过管道传送到
tr "\n" ":"发布于 2014-08-22 00:31:49
为什么使用sed或awk?如果文件格式始终相同,则可以使用:
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"https://stackoverflow.com/questions/25429957
复制相似问题