我有一个包含一些记录的文本文件。每个记录分为4行(并不总是4行),如示例所示:
----
row1
row2
row3
row4
----
row1
etc...
每行以换行符(LF)结束。 好的,我只需要在一行中获取记录,用空格替换LF字符,如例:
---- row1 row2 row3 row4
---- row1 row2 ...etcetera
对解决方案有何帮助或建议? 提前谢谢。
答案 0 :(得分:7)
也许这可行吗?
cat FILE | xargs | sed "s/ ---- /\n---- /g"
答案 1 :(得分:5)
tr "\n" " " <file | awk '{gsub(/--+/,"\n&");print}'
或全部在一个awk
awk '/--/{print s;printf $0;s=""}!/--/{s=s" "$0}END{print s}' file
答案 2 :(得分:1)
这是一个更简单的方法
cat text_file | tr '\n' ' ' | sed 's/ ---/\n---/g'
答案 3 :(得分:0)
您需要知道记录之间的分隔符究竟是什么。在你的例子中,它看起来像'----',但你也说过有不同数量的记录。
无论如何,像这样的事情最好用这样的代码完成:
cat source | (
acc=""
while read -r line; do
if test "$line" = "----" -a -n "$acc"; then
echo "$acc"
acc="$line"
else
test -n "$acc" && { acc="$acc "; }
acc="${acc}$line"
fi
done
test -n "$acc" && { echo "$acc"; }
)
答案 4 :(得分:0)
使用awk而不是shell脚本
通过文本文件进行迭代并根据行内容执行不同的操作,正是awk的设计目标。
在21世纪,shell脚本应该保持简单,其他工具用于复杂的逻辑。
答案 5 :(得分:0)
awk 'BEGIN {RS="----"; FS="\n"; OFS=" "} FNR==1 {next} {$1=RS $1; print}' input.file