2013-10-20 65 views
-1

我有以下形式CSV數據:linux命令讓行規定的格式

1 number  tab one 
    2 number two 
    3 number three 

現在我想將數據轉換爲以下形式:

1 number tab one 
    2 number two 
    3 number three 

即我想第一個標籤保持原樣,但第二個和連續的標籤要用空格替換。是否有可能使用Linux命令(如sed等)。我知道我可以使用sed進行替換,但是可以使其跳過第一個選項卡空間並從第二個選項卡空間開始替換。

+0

看起來你正在尋找'awk'。 –

+0

@JimGarrison我試過sed's/^ [\ t] * //'但它似乎並不需要 –

回答

3

這可能會爲你工作(GNU SED):

sed 's/\t/ /2g' file 
1

使用awk,你可以這樣做。

cat file 
1  number tab  one 
2  number two 
3  number three 

awk

awk '{$1=$1;sub(/ /,"\t")}1' 
1  number tab one 
2  number two 
3  number three 

$1=$1將所有空間,以默認的空間。

sub(/ /,"\t")改變第一空間的片

1打印一切

PS您可以使用跳過第一個標籤一個for循環中去低谷各個領域,但爲什麼讓它更復雜然後在需要時的功能是那裏?只有學校工作有這種要求。

1

跳過第一個標籤並不容易。

但是你可以重新定義這個問題是這樣的:

  1. 用空格替換所有的標籤
  2. 與標籤

替換第一個空間,這可能是有點有損,但它實際上是可忽略不計,且結果相同:

sed -e 's/ //g; s// /' < yourfile.txt 

要輸入TAB字符rs在命令行上,您可能必須鍵入Ctrl-V TAB

sed舊的實現,其中分號不起作用分隔兩個命令可以使用2個-e表達式來代替:

sed -e 's/ //g' -e 's// /' < yourfile.txt 
1
cat file 
1 number  tab one 
2 number two 
3 number three 

試試這個:

sed 's/\s\+/ /2g' file 
1 number tab one 
2 number two 
3 number three