2017-05-31 128 views
0

我有以下awk命令來選擇從file_a的前兩列並打印它們在file_bAwk保留空行

awk '{print $1"\t"$2}' file_a > file_b 

file_a是製表符分隔,並有我想保留一些空行。當運行上面的命令時,儘管空白行被打印爲\ t \ n,並且我希望它們繼續只是\ n。我需要在awk命令中更改哪些內容?

回答

2
awk '{print (NF ? $1"\t"$2 : $0)}' file_a > file_b 
+2

我覺得自己的驕傲:我想象中的差不多瞭解決方案:) – fedorqui

0

嘗試

awk 'BEGIN{FS=OFS="\t"} {if(NF) print $1,$2; else print}' file 

awk 'BEGIN{FS=OFS="\t"} NF{print $1,$2; next}1' file 
0

短一點:

awk '/^$/;/./{print $1"\t"$2}' file_a > file_b 

但這不會在特殊情況下的工作就像在第一或第二列是空的或列數據包含空格。爲了正確處理您的表格數據,使用這個命令:

awk -F"\t" '/^$/;/./{print $1"\t"$2}' file_a > file_b 
+0

@EdMorton當然它。空行(^ $)有額外的不需要的選項卡。該命令保留空行。沒有提到是否有隻有一列的行(「選擇前兩列」意味着或多或少至少有兩列)。 – steffen

+0

@EdMorton Man,這些都是純粹的假設。你也不準確:像我一樣,你不希望列中出現空格,這是行不通的!更嚴重的是:您不希望空白(空白)第一列或第二列。它不會工作!這是一個模糊問題的不精確答案。對不起,但我不認爲你的評論是適當的。無論如何。看我的編輯。 – steffen

+0

@EdMorton反正。我編輯了第一個解決方案,因此它可以在一行中使用零個選項卡(現在甚至更短:-P)並添加了第二個選項卡。 – steffen