我有以下awk
命令來選擇從file_a
的前兩列並打印它們在file_b
。Awk保留空行
awk '{print $1"\t"$2}' file_a > file_b
file_a
是製表符分隔,並有我想保留一些空行。當運行上面的命令時,儘管空白行被打印爲\ t \ n,並且我希望它們繼續只是\ n。我需要在awk
命令中更改哪些內容?
我有以下awk
命令來選擇從file_a
的前兩列並打印它們在file_b
。Awk保留空行
awk '{print $1"\t"$2}' file_a > file_b
file_a
是製表符分隔,並有我想保留一些空行。當運行上面的命令時,儘管空白行被打印爲\ t \ n,並且我希望它們繼續只是\ n。我需要在awk
命令中更改哪些內容?
awk '{print (NF ? $1"\t"$2 : $0)}' file_a > file_b
嘗試
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
短一點:
awk '/^$/;/./{print $1"\t"$2}' file_a > file_b
但這不會在特殊情況下的工作就像在第一或第二列是空的或列數據包含空格。爲了正確處理您的表格數據,使用這個命令:
awk -F"\t" '/^$/;/./{print $1"\t"$2}' file_a > file_b
@EdMorton當然它。空行(^ $)有額外的不需要的選項卡。該命令保留空行。沒有提到是否有隻有一列的行(「選擇前兩列」意味着或多或少至少有兩列)。 – steffen
@EdMorton Man,這些都是純粹的假設。你也不準確:像我一樣,你不希望列中出現空格,這是行不通的!更嚴重的是:您不希望空白(空白)第一列或第二列。它不會工作!這是一個模糊問題的不精確答案。對不起,但我不認爲你的評論是適當的。無論如何。看我的編輯。 – steffen
@EdMorton反正。我編輯了第一個解決方案,因此它可以在一行中使用零個選項卡(現在甚至更短:-P)並添加了第二個選項卡。 – steffen
我覺得自己的驕傲:我想象中的差不多瞭解決方案:) – fedorqui