我有一个文件列表,这些文件的列以不同数量的空格分隔。我可以选择或类似这样,以便每列用一个空格或标签分隔吗?
我试过了:
sed 's/ \+ /\t/g' file > tmp
sed "s/\ /\t/g" tmp > file
但R抱怨
line 526 did not have 11 elements
答案 0 :(得分:3)
答案 1 :(得分:2)
尝试:
sed 's/ \{1,\}/\t/g' file > tmp
这需要一个或多个空格并转换为表达式第二部分中的字符串(' \ t'此处)。
答案 2 :(得分:0)
假设你有一个名为" raw_file"的文件。
中有下面的文字COLUMN1 COLUMN2 COLUMN3 COLUMN4
I am a boy
Hello word
I see you
I am 5 years
How are you?
您可以使用命令:
sed 's/ \{1,\}/ /g' '/root/Desktop/raw_file' |column -s ' ' -t > '/root/Desktop/my_new_file'
输出到新文件时的结果" my_new_file"
COLUMN1 COLUMN2 COLUMN3 COLUMN4
I am a boy
Hello word
I see you
I am 5 years
输出到终端时的结果
使用的命令:
sed 's/ \{1,\}/ /g' '/root/Desktop/raw_file' |column -s ' ' -t 2> /dev/null
结果:
COLUMN1 COLUMN2 COLUMN3 COLUMN4
I am a boy
Hello word
I see you
I am 5 years
注意:每列用两个空格分隔。
答案 3 :(得分:0)
awk将直接轻松地处理空白
awk '$1=$1' infile # convert to single space
or
awk '$1=$1' OFS="\t" infile # convert to single tab
如果您必须使用SED,则字符类\s
将匹配空白字符tab
和space
所以您的sed代码可以修复为
sed 's/\s\{1,\}/ /g' infile
or
sed 's/\s\{1,\}/\t/g' infile
如果您的sed支持-r
选项,
sed -r 's/\s+/ /g' infile
or
sed -r 's/\s+/\t/g' infile