单行中的多行并从某些行中删除重复项
mutiple lines in single line and remove duplicates from some lines
这是我所拥有的,这是整个序列:
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...
有时测试线被限制为一条,但每条线以“;”分隔。
当有多个"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"
感谢您的任何建议,
铝
我会跟踪出现的以 test
开头的最后一行,并在一行不是这样开头时打印它:
$ awk '/^test/ {t=[=10=]; 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=[=11=]; 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
在 sed 中
sed '/test/h;//!{x;//p;x;h};${//p};//d' file
在缓冲区中保留测试行,覆盖之前的直到没有并删除该行。
在下一个 none 测试行或文件末尾打印最后一个测试,假设已保存一个测试。
我也找到了这个...计算每行的字数...
while read line;
do
COUNT=$(echo "${line}" | wc -w)
if [ "${COUNT}" == "7" ]
then
echo ${line} | awk '{print ,,,,}' >> tmp8
elif [ "${COUNT}" == "6" ]
then
echo ${line} | awk '{print ,,,,}' >> tmp8
else
echo ${line} | awk '{print ,,,,}' >> tmp8
fi
done < tmp7
这是我所拥有的,这是整个序列:
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...
有时测试线被限制为一条,但每条线以“;”分隔。 当有多个"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"
感谢您的任何建议,
铝
我会跟踪出现的以 test
开头的最后一行,并在一行不是这样开头时打印它:
$ awk '/^test/ {t=[=10=]; 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=[=11=]; 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
在 sed 中
sed '/test/h;//!{x;//p;x;h};${//p};//d' file
在缓冲区中保留测试行,覆盖之前的直到没有并删除该行。
在下一个 none 测试行或文件末尾打印最后一个测试,假设已保存一个测试。
我也找到了这个...计算每行的字数...
while read line;
do
COUNT=$(echo "${line}" | wc -w)
if [ "${COUNT}" == "7" ]
then
echo ${line} | awk '{print ,,,,}' >> tmp8
elif [ "${COUNT}" == "6" ]
then
echo ${line} | awk '{print ,,,,}' >> tmp8
else
echo ${line} | awk '{print ,,,,}' >> tmp8
fi
done < tmp7