这是我所拥有的,这是整个序列:
aa="aa1"
etime="1436262792"
from="joe"
test="blah"
test="blah1"
test="blah2"
addr="aa2";
aa="aa1"
etime="1436262792"
from="bob"
test="blah3"
addr="aa2";
etc...
有时候测试线被限制为一个,但是每个都用&#34 ;;"分开。 当有多个" test"时,我只需保留最后一个。
我想得到这个结果:
aa="aa1" etime="1436262792" from="joe" test="blah2" addr="aa2";
aa="aa1" etime="1436262793" from="bob" test="blah3" addr="aa2";
这是我目前的发现;
cat file | xargs | tr ';' '\n;'
输出看起来像这样:
aa="aa1" etime="1436262793" from="joe" test="blah" test="blah2" test="blah3" addr="aa2"
aa="aa1" etime="1436262793" from="bob" test="blah3" test="blah3" addr="aa2"
感谢您提出任何建议,
的Al。
答案 0 :(得分:2)
我会跟踪出现的test
开头的最后一行,当一行没有像这样开始时打印出来:
$ awk '/^test/ {t=$0; next} {if (t) print t; print; t=""}' file
aa="aa1"
etime="1436262792"
from="joe"
test="blah2"
addr="aa2";
aa="aa1"
etime="1436262792"
from="bob"
test="blah3"
addr="aa2";
然后通过管道到xargs -n 5
打印每行5个字段的块:
$ awk '/^test/ {t=$0; next} {if (t) print t; print; t=""}' file | xargs -n 5
aa=aa1 etime=1436262792 from=joe test=blah2 addr=aa2;
aa=aa1 etime=1436262792 from=bob test=blah3 addr=aa2
答案 1 :(得分:1)
在sed
sed '/test/h;//!{x;//p;x;h};${//p};//d' file
将测试行保留在缓冲区中,覆盖之前的测试行,直到没有测试行并删除该行。
在下一个无测试行或文件末尾,它会打印最后一个测试,因为保存了一个。
答案 2 :(得分:0)
我已经发现了这个......计算每行的单词数量......
while read line;
do
COUNT=$(echo "${line}" | wc -w)
if [ "${COUNT}" == "7" ]
then
echo ${line} | awk '{print $1,$2,$3,$6,$7}' >> tmp8
elif [ "${COUNT}" == "6" ]
then
echo ${line} | awk '{print $1,$2,$3,$5,$6}' >> tmp8
else
echo ${line} | awk '{print $1,$2,$3,$4,$5}' >> tmp8
fi
done < tmp7