我有一个类似的文件:
padding-right 25%
我希望它像
一样出现A
B
C
D
E
F
G
H
I
J
K
L
我假设我使用A,B,C,D
E,F,G,H
,但实际上我甚至不确定这是否是最好的工具。我愿意使用Linux系统上常用的任何东西。
在sed
中,我这样做了......它有效,但它很脏并且有一个尾随逗号。希望更简单的事情:
perl
答案 0 :(得分:8)
将input record separator设置为段落模式(-00
),然后在剩余的任何空格上拆分每条记录:
<h1>{{ question.question_text }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
<a href="{% url 'polls:index' %}">Index</a>
</form>
添加-l
以启用自动换行符(但请确保它在$ perl -00 -ne 'print join("," => split), "\n"' test
之前,因为我们希望-00
之前设置为$\
的值修改):
$/
添加-a
以启用自动分段模式并隐式拆分为$ perl -l -00 -ne 'print join("," => split)' test
:
@F
为-p
换出$ perl -l -00 -ane 'print join("," => @F)' test
以进行自动打印:
-n
答案 1 :(得分:3)
您可以使用
awk 'BEGIN {RS=""; FS="\n"; ORS="\n"; OFS=","} {$1=$1} 1' file
我看到gawk手册说:
如果RS 设置为空字符串,然后记录由空行分隔。当RS设置为空字符串时,除了FS可能具有的任何值之外,换行符始终充当字段分隔符。
因此我们实际上不需要指定FS来获得所需的输出:
awk 'BEGIN {RS=""; ORS="\n"; OFS=","} {$1=$1} 1' file
答案 2 :(得分:2)
xargs
可以做到,
$ xargs -n4 < file | tr ' ' ','
A,B,C,D
E,F,G,H
I,J,K,L
答案 3 :(得分:0)
用sed
替换换行符有点复杂(请参阅this question)。将tr
用于换行更容易。其余的可以通过sed
完成。
以下命令假定yourFile
不包含任何,
。
tr '\n' , < yourFile | sed 's/,*$/\n/;s/,,/\n/g'
tr
部分会将所有换行符转换为,
。结果字符串没有换行符
s/,*$/\n/
删除尾随逗号并附加换行符(文本文件通常以换行符结尾)
s/,,/\n/g
用换行符替换,,
。两个连续的逗号只出现在原始文件包含两个连续换行符的位置,即用空行分隔的部分。