我需要编辑一些文本文件(来自sar
的输出)并将其转换为CSV文件。
我需要使用sed或awk函数(在Linux中使用简单的shell脚本)来更改每个空格(可能是输出中数字之间的选项卡)。
任何人都可以帮助我吗?我使用的每个命令都没有改变文件;我试过gsub
。
答案 0 :(得分:76)
tr ' ' ',' <input >output
用逗号替换每个空格,如果需要,可以使用-s标志(压缩重复)进行传递,用一个替换SET1(空格)中列出的重复字符的每个输入序列这个角色的出现。
在替换标签之后使用挤压重复:
tr -s '\t' <input | tr '\t' ',' >output
答案 1 :(得分:26)
尝试类似:
sed 's/[:space:]+/,/g' orig.txt > modified.txt
字符类[:space:]将匹配所有空格(空格,制表符等)。如果您只想替换单个字符,例如。只是空间,只使用它。
编辑:实际上[:space:]包括回车,所以这可能不会做你想要的。以下内容将替换制表符和空格。
sed 's/[:blank:]+/,/g' orig.txt > modified.txt
将
sed 's/[\t ]+/,/g' orig.txt > modified.txt
在所有这些中,您需要注意文件中由空格分隔的项目不包含您想要保留的空白,例如。两个字。
答案 2 :(得分:24)
没有查看输入文件,只能猜测
awk '{$1=$1}1' OFS=","
重定向到另一个文件并根据需要重命名
答案 3 :(得分:10)
这样的事情:
cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt
(是的,有一些无用的捕捉和管道;也可以使用&lt;直接从文件中读取,我想 - 首先使用cat输出文件的内容,然后才添加sed到我的命令行)
编辑:正如@ ghostdog74在评论中指出的那样,肯定不需要猫/管道;你可以把文件的名称给sed:
sed -e 's/\s/,/g' texte.txt > texte-new.txt
如果“texte.txt”是这样的话:
$ cat texte.txt
this is a text
in which I want to replace
spaces by commas
你会得到一个“texte-new.txt”,看起来像这样:
$ cat texte-new.txt
this,is,a,text
in,which,I,want,to,replace
spaces,by,commas
我不会只用新的替换旧文件(如果我没记错的话可以用sed -i完成;而且@ ghostdog74说,这个人会接受动态创建备份):保持可能是明智的,作为安全措施(即使它意味着必须将其重命名为“texte-backup.txt”)
答案 4 :(得分:7)
此命令应该有效:
sed "s/\s/,/g" < infile.txt > outfile.txt
请注意,您必须将输出重定向到新文件。输入文件未就地更改。
答案 5 :(得分:5)
sed可以这样做:
sed 's/[\t ]/,/g' input.file
这将发送到控制台,
sed -i 's/[\t ]/,/g' input.file
将就地编辑文件
答案 6 :(得分:3)
这是一个Perl脚本,可以就地编辑文件:
perl -i.bak -lpe 's/\s+/,/g' files*
将连续的空格转换为单个逗号 每个输入文件都移动到.bak
使用以下命令行选项:
-i.bak
就地编辑并制作.bak副本
-p
循环输入文件的每一行,自动打印行
-l
在处理之前删除换行符,然后将其添加回来
-e
执行perl代码
答案 7 :(得分:0)
如果您要用一个逗号替换任意序列的空白字符(制表符,空格),请使用以下命令:
sed 's/[\t ]+/,/g' input_file > output_file
或
sed -r 's/[[:blank:]]+/,/g' input_file > output_file
如果您的某些输入行包含多余的前导空格字符,无需将其转换为逗号,则首先需要删除它们,然后将其余的空白字符转换为逗号。对于这种情况,请使用以下命令:
sed 's/ +//' input_file | sed 's/[\t ]+/,/g' > output_file
答案 8 :(得分:0)
这对我有用。
sed -e 's/\s\+/,/g' input.txt >> output.csv