2014-12-06 64 views
0

我有一列文件,其列中有不同數量的空格分隔的列。你可以sed或類似這樣,每列由一個空格或製表符分隔?用單個空格替換文件中的不同數量的空格

我想:

sed 's/ \+ /\t/g' file > tmp 
sed "s/\ /\t/g" tmp > file 

但[R抱怨

line 526 did not have 11 elements 

回答

3

你可以使用tr

tr -s < fileName 

sed

sed -e 's/ \+/ /g' fileName 

內嵌的sed

sed -i.bak -e 's/ \+/ /g' fileName 
+0

乾杯!並感謝多個答案 – cianius 2014-12-06 01:14:39

+0

'tr'命令中我沒有'-s'選項,我的tr版本是''tr'(GNU coreutils)8.4'在'centOS'上運行,你能分享你的'tr'版本嗎? – BMW 2014-12-07 01:14:34

2

嘗試:

sed 's/ \{1,\}/\t/g' file > tmp 

這需要一個或多個空格和轉換爲在表達式( '\ T' 在這裏)的第二部分的字符串。

+0

+ 1歡迎來到本網站。你也可以指定「-i」 – Khanna111 2014-12-06 00:46:32

+0

謝謝! -i選項很有用,但要小心提供創建備份所需的後綴。易於用-i單獨覆蓋單個副本。 – economy 2014-12-06 00:51:59

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 

注:每一列被兩個空格分隔。

0

awk將直接照顧空白的,容易

awk '$1=$1' infile  # convert to single space 

or 

awk '$1=$1' OFS="\t" infile  # convert to single tab 

如果你必須使用SED,字符類\s將匹配空白字符tabspace

讓你的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 
相關問題