2011-08-17 38 views
2

我有一個文件,這是comm命令的結果,它有2列,我希望將這兩列分成兩個不同的文件,我該怎麼做?
文件看起來像:根據列分隔符shellscript獲取列數據

 
a 
b 
     g 
     f 
c 
d 

回答

5

,你可以這樣做:

cut -f1 orig_file >file1 
cut -f2 orig_file >file2 

這裏列分隔符應該是一個TAB。如果是另一個字符,則可以使用-d char選項cut

如果要刪除空行,按您的要求,您可以添加到每行sed命令:

cut -f1 orig_file | sed -e /^$/d >file1 
cut -f2 orig_file | sed -e /^$/d >file2 
+0

+1,如果輸入文件的行爲如此,字段分隔符切割效果最好 – orip

+0

@Diego Sevilla,如何刪除結果文件中的空行? – user881480

+0

@user,看我的編輯。 –

1

使用cut將導致每列的命令。 你可以在一個命令中使用awk來完成它。

awk '{for (i=1;i<=NF;i++) print $i>i".txt"}' your_file 

默認情況下,Tab是字段分隔符。 櫃面現場分離比標籤等,然後awk後添加一個標誌像下面

awk -F"<field separator>" '{.... 
1

您可以根據性格指標削減相關部分:

# assuming constant 5 chars for col1, 5 chars for col2 
cat file | cut -c0-5 | sed '/^\s*$/ {d}' > col1 
cat file | cut -c6-10 | sed '/^\s*$/ {d}' > col2 

sed管刪除空行(那些只有空白)。他們也可以通過grep -v '^[[:space:]]*$'刪除。

+1

你不必在這裏「貓」。 'cut'也可以讀取文件。 –

+0

@Diego:當然,這是一個風格問題。我發現在管道中進行所有操作是很好的。 – orip