我想删除控制返回并合并一个文本文件中的行并限制字符数
输入.txt包含:
comment 1
comment 2
...
comment n
输出.txt应该有一个字符串:
comment 1 comment 2 ... commnet n
但输出.txt应限制为 32 个字符:
comment 1 comment 2 comment 3 co
我可以使用 sed、awk tr 或其他东西吗?
答案1
head -c 32 input.txt | tr '\n' ' ' > output.txt
head -c 32
丢弃除前 32 个字节之外的所有字节。tr '\n' ' '
用空格字符替换所有换行符。
如果你想限制人物代替字节如果是多字节字符编码,你可以使用grep
:
tr '\n' ' ' < input.txt | grep -oEe '^.{,32}' > output.txt
答案2
awk 就可以了。一种方法是:
$ echo -n "comment 1\rcomment 2\r...\rcomment n\r" > input.txt
$ cat input.txt | awk -v FS="" -v RS="" '{for (i=1;i<=32;i++) printf ($i == "\r")? "" : $i}' > output.txt
$ cat output.txt
comment 1comment 2...comment
解释:默认情况下,awk 逐行处理输入,每行调用记录;每行逐列处理,单列称为场地。 每一个场地由以 1 开头的变量引用,例如 $1、$2、$3…
因此,你可以通过设置来更改默认行为F领域年代分隔符为""
,导致 awk 逐个字符地处理内容。然后你设置R记录年代分隔符,""
以便您可以一次引用所有文本的字符(即无需编写代码来逐行处理内容)。
最后,您可以轻松地对字符进行操作,因此您可以循环遍历字段(即字符),并且仅当字符不是回车符时才打印。
答案3
tr '\n' ' ' < in.txt | cut -c -32
tr '\n' ' '
:从输入文本中删除新行cut -c -32
:限制输出为 32 个字符