我有一个文本文件,其中包含以下格式的数据。
1^0^this is test file line1^
2^1^this is test file line2^
3^1^this
is
test
file line3^
4^1^this
is
file line4^
直到下一行以^结尾,它需要在前一行后面添加
输出:
1^0^this is test file line1^
2^1^this is test file line2^
3^1^this is test file line3^
4^1^this is file line4^
答案 0 :(得分:3)
根据行尾操作输出记录分隔符(ORS
)的值。
$ awk '{ORS=/\^$/?"\n":" "}1' file
1^0^this is test file line1^
2^1^this is test file line2^
3^1^this is test file line3^
4^1^this is file line4^
答案 1 :(得分:0)
便宜又轻松的bash脚本。而不是查找结尾的胡萝卜,而是查找开头的数字和胡萝卜。
#!/bin/bash
filename=$HOME/asdf.txt
prevLine=""
while IFS= read -r var
do
if [[ $var =~ ^[0-9]{1}\^.*$ ]]
then
echo "$prevLine"
prevLine=""
prevLine="$var"
else
prevLine+=" $var"
fi
done < "$filename"
echo "$prevLine"
答案 2 :(得分:0)
使用GNU sed 4.2(支持-z选项),您可以使用
textCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
使用较旧的sed -rz 's/([^^])\n/\1/g' file
,您可以使用
sed
编辑:如果要在连接的行之间留空格,请使用
tr "\n" "\r" < file | sed -r 's/([^^])\r/\1/g' | tr "\r" "\n"
答案 3 :(得分:0)
另一个人使用鲜为人知的保留空间来保存一个人
$ sed -ne '/[^^]$/{H;d}; {H;g;s/\n/ /g;p;s/.*//;h}' test.txt;
^1^0^this is test file line1^
^2^1^this is test file line2^
^3^1^this is test file line3^
^4^1^this is file line4^
基本上:如果当前行( pattern space )的结尾不是^,请将其附加到 hold space 并继续下一行。否则,再次将当前行追加到保留空间,然后用保留空间替换当前模式空间,处理H
添加的换行符,然后打印结果。然后清空保持空间,为下一行代码做准备(不幸的是,一步一步完成这件事似乎并不容易)
注意:
s/.*//
替换为z
。