【发布时间】:2010-11-19 06:20:40
【问题描述】:
我需要编辑一些文本文件(sar 的输出)并将它们转换为 CSV 文件。
我需要使用 sed 或 awk 函数(Linux 中的简单 shell 脚本)更改每个空格(可能是输出中数字之间的制表符)。
谁能帮帮我?我使用的每个命令根本没有更改文件;我试过gsub。
【问题讨论】:
我需要编辑一些文本文件(sar 的输出)并将它们转换为 CSV 文件。
我需要使用 sed 或 awk 函数(Linux 中的简单 shell 脚本)更改每个空格(可能是输出中数字之间的制表符)。
谁能帮帮我?我使用的每个命令根本没有更改文件;我试过gsub。
【问题讨论】:
tr ' ' ',' <input >output
用逗号替换每个空格,如果需要,可以使用 -s 标志(挤压重复)进行传递,它将 SET1(空格)中列出的重复字符的每个输入序列替换为单个该字符的出现。
在替换标签之后使用挤压重复:
tr -s '\t' <input | tr '\t' ',' >output
【讨论】:
-s 确实是我想要的。
尝试类似:
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
在所有这些中,您需要注意文件中由空格分隔的项目不包含您要保留的自己的空格,例如。两个字。
【讨论】:
-r 所以sed -r "s'[[:blank:]]+','g"
\s+ 工作:sed -E 's/\s+/,/g' orig.txt > modified.txt,但它没有。甚至sed 's/[\t ]+/,/g' orig.txt > modified.txt 也无法匹配标签。唯一对我有用的 sed 命令是:sed -E 's/[[:space:]]+/,/g' orig.txt > modified.txt
不看你的输入文件,只是猜测
awk '{$1=$1}1' OFS=","
重定向到另一个文件并根据需要重命名
【讨论】:
{$1=$1; print}。
这样的事情怎么样:
cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt
(是的,有一些无用的 catting 和管道;我想也可以使用
编辑: 正如@ghostdog74 在评论中指出的那样,绝对不需要 cat/pipe ;您可以将文件的名称提供给 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”)
【讨论】:
这个命令应该可以工作:
sed "s/\s/,/g" < infile.txt > outfile.txt
请注意,您必须将输出重定向到新文件。输入文件没有原地改变。
【讨论】:
sed 可以做到这一点:
sed 's/[\t ]/,/g' input.file
这将发送到控制台,
sed -i 's/[\t ]/,/g' input.file
将就地编辑文件
【讨论】:
这是一个 Perl 脚本,它将就地编辑文件:
perl -i.bak -lpe 's/\s+/,/g' files*
连续的空格被转换为一个逗号。
每个输入文件都移动到 .bak
使用这些命令行选项:
-i.bak 就地编辑并制作 .bak 副本
-p循环输入文件的每一行,自动打印该行
-l 在处理之前删除换行符,然后将它们添加回
-e执行perl代码
【讨论】:
如果您想用一个逗号替换任意序列的空白字符(制表符、空格),请使用以下命令:
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
【讨论】:
这对我有用。
sed -e 's/\s\+/,/g' input.txt >> output.csv
【讨论】: