在Linux中的文本文件中用逗号替换空格

56 linux csv shell awk sed

我需要编辑一些文本文件(输出sar)并将它们转换为CSV文件.

我需要使用sed或awk函数(Linux中的简单shell脚本)更改每个空格(可能是输出中数字之间的选项卡).

谁能帮我?我使用的每个命令都没有改变文件; 我试过了gsub.

Alb*_*gni 79

tr ' ' ',' <input >output 
Run Code Online (Sandbox Code Playgroud)

用逗号替换每个空格,如果需要,可以用-s标志(压缩重复)进行传递,用一次出现的替换SET1(空格)中列出的重复字符的每个输入序列.字符.

在替换标签之后使用挤压重复:

tr -s '\t' <input | tr '\t' ',' >output 
Run Code Online (Sandbox Code Playgroud)

  • 我不知道原因,但只有这个使用"tr"的方法适用于我的情况.sed和awk都无法处理由Java程序生成的文件中的空格. (4认同)

dav*_*ave 27

尝试类似的东西:

sed 's/[:space:]+/,/g' orig.txt > modified.txt
Run Code Online (Sandbox Code Playgroud)

字符类[:space:]将匹配所有空格(空格,制表符等).如果您只想替换单个字符,例如.只是空间,只使用它.

编辑:实际上[:space:]包括回车,所以这可能不会做你想要的.以下内容将替换制表符和空格.

sed 's/[:blank:]+/,/g' orig.txt > modified.txt
Run Code Online (Sandbox Code Playgroud)

一如既往

sed 's/[\t ]+/,/g' orig.txt > modified.txt
Run Code Online (Sandbox Code Playgroud)

在所有这些中,您需要注意文件中由空格分隔的项目不包含您想要保留的空白,例如.两个字.

  • GNU sed需要这种语法:sed's/[[:space:]]\+ /,/ g'filename (13认同)
  • *OSX 10.10.5*:我希望`\ s +`可以工作:`sed -E'/\s + /,/ g'ornd.txt> modified.txt`,但事实并非如此.甚至`sed's/[\ t] + /,/ g'orig.txt> modified.txt`也无法匹配标签.唯一适合我的sed命令是:`sed -E's/[[:space:]] + /,/ g'orig.txt> modified.txt` (2认同)

gho*_*g74 26

没有看你的输入文件,只有一个猜测

awk '{$1=$1}1' OFS=","
Run Code Online (Sandbox Code Playgroud)

重定向到另一个文件并根据需要重命名

  • 我假设大括号后的最后1是打印行的始终为真的模式?我会选择可读性更高的`{$ 1 = $ 1; 打印}`。 (2认同)
  • 是。它是真实条件的awk惯用法,默认情况下会打印到stdout。 (2认同)

Pas*_*TIN 10

这样的事情怎么样:

cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt
Run Code Online (Sandbox Code Playgroud)

(是的,有一些无用的捕捉和管道;也可以使用<直接从文件中读取,我想 - 首先使用cat输出文件的内容,然后才添加sed到我的命令行)

编辑:正如@ ghostdog74在评论中指出的那样,绝对不需要猫/管; 你可以给sed提供文件的名称:

sed -e 's/\s/,/g' texte.txt > texte-new.txt
Run Code Online (Sandbox Code Playgroud)

如果"texte.txt"是这样的:

$ cat texte.txt
this is a text
in which I want to replace
spaces by commas
Run Code Online (Sandbox Code Playgroud)

你会得到一个"texte-new.txt",它看起来像这样:

$ cat texte-new.txt
this,is,a,text
in,which,I,want,to,replace
spaces,by,commas
Run Code Online (Sandbox Code Playgroud)

我不会只用新的替换旧文件(可以用sed -i完成,如果我没记错的话;并且正如@ ghostdog74所说,这个人会接受动态创建备份):保持可能是明智的,作为一种安全措施(即使它意味着必须将其重命名为"texte-backup.txt")


Daw*_*uss 7

这个命令应该工作:

sed "s/\s/,/g" < infile.txt > outfile.txt
Run Code Online (Sandbox Code Playgroud)

请注意,您必须将输出重定向到新文件.输入文件未就地更改.


ezp*_*zpz 5

sed可以这样做:

sed 's/[\t ]/,/g' input.file
Run Code Online (Sandbox Code Playgroud)

那将发送到控制台,

sed -i 's/[\t ]/,/g' input.file
Run Code Online (Sandbox Code Playgroud)

将就地编辑文件