我有input.txt
1
2
3
4
5
我需要得到这样的output.txt
1,2,3,4,5
怎么做?
答案 0 :(得分:63)
试试这个:
tr '\n' ',' < input.txt > output.txt
答案 1 :(得分:16)
使用sed
,您可以使用:
sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d'
H
将模式空间附加到保留空间(将当前行保存在保留空间中)。 ${...}
围绕仅适用于最后一行的操作。这些行动是:x
交换保持和模式空间; s/\n/,/g
用逗号替换嵌入的换行符; s/^,//
删除前导逗号(在保留空间的开头有一个换行符);和p
打印。 d
删除模式空间 - 不打印。
你也可以使用:
sed -n -e 'H;${x;s/\n/,/g;s/^,//;p;}'
-n
会抑制默认打印,因此不再需要最终d
。
此解决方案假定CRLF行结尾是本地本机行结尾(因此您正在使用DOS),因此sed
将生成以打印操作结束的本地本机行。如果您有DOS格式输入但想要Unix格式(仅限LF)输出,那么您必须更加努力 - 但您还需要在问题中明确规定。
MacOS X 10.6.5上的数字1..5,1..50和1..5000(单行输出中为23,893个字符)对我有效。我不确定我是否想要更加努力地推动它。
答案 2 :(得分:10)
回应@ Jonathan对@ eumiro回答的评论:
tr -s '\r\n' ',' < input.txt | sed -e 's/,$/\n/' > output.txt
答案 3 :(得分:10)
tr
和sed
使用非常好,但是当涉及文件解析和正则表达式时,你无法击败perl
(不确定为什么人们认为sed和tr比perl更接近shell ...)
perl -pe 's/\n/$1,/' your_file
如果你想要纯shell来做,那么看看字符串匹配
${string/#substring/replacement}
答案 4 :(得分:7)
awk '{printf("%s,",$0)}' input.txt
awk 'BEGIN{ORS=","} {print $0}' input.txt
1,2,3,4,5,
由于您要求1,2,3,4,5
,与1,2,3,4,5,
相比(请注意5之后的逗号,上面的大多数解决方案也包括尾随逗号),这里还有两个带有Awk的版本(带{ {1}}和wc
)删除最后一个逗号:
sed
i='input.txt'; awk -v c=$(wc -l $i | cut -d' ' -f1) '{printf("%s",$0);if(NR<c){printf(",")}}' $i
答案 5 :(得分:4)
使用粘贴命令。这是使用管道:
echo "1\n2\n3\n4\n5" | paste -s -d, /dev/stdin
这是使用文件:
echo "1\n2\n3\n4\n5" > /tmp/input.txt
paste -s -d, /tmp/input.txt
每个人页面的s连接所有行,d允许定义分隔符。
答案 6 :(得分:1)
cat input.txt | sed -e 's|$|,|' | xargs -i echo "{}"
答案 7 :(得分:0)
python版本:
/**
* RSA PKCS#1 signature scheme using SHA256 for message hashing.
* The actual algorithm id is 1.2.840.113549.1.1.1
* Note: Recommended key size >= 3072 bits.
*/
@JvmField
val RSA_SHA256 = SignatureScheme(
1,
"RSA_SHA256",
AlgorithmIdentifier(PKCSObjectIdentifiers.sha256WithRSAEncryption, null),
listOf(AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, null)),
BouncyCastleProvider.PROVIDER_NAME,
"RSA",
"SHA256WITHRSA",
null,
3072,
"RSA_SHA256 signature scheme using SHA256 as hash algorithm."
)
没有尾随逗号问题(因为python -c 'import sys; print(",".join(sys.stdin.read().splitlines()))'
以这种方式工作),join
在本机行结尾处拆分数据(并删除它们)。
答案 8 :(得分:0)
printf "1\n2\n3" | tr '\n' ','
如果要将其输出到文件中,只需
printf "1\n2\n3" | tr '\n' ',' > myFile
如果文件中包含内容,则
cat myInput.txt | tr '\n' ',' > myOutput.txt