我有TSV的文件1,該結構如下:如何用tsv替換tsv中的空字符串?
col1 col2 col3
1 4 3
22 0 8
3 5
所以,最後一行看起來像3\t\t5
,如果它被打印出來。我想用'NA'替換空字符串,以便該行將是3\tNA\t5
。使用命令行執行此操作的最簡單方法是什麼?
我有TSV的文件1,該結構如下:如何用tsv替換tsv中的空字符串?
col1 col2 col3
1 4 3
22 0 8
3 5
所以,最後一行看起來像3\t\t5
,如果它被打印出來。我想用'NA'替換空字符串,以便該行將是3\tNA\t5
。使用命令行執行此操作的最簡單方法是什麼?
AWK是專爲這種情況(其中一百萬人;-))
awk -F"\t" -v OFS="\t" '{
for (i=1;i<=NF;i++) {
if ($i == "") $i="NA"
}
print $0
}' file > file.new && mv file.new file
-F="\t"
表示字段分隔符(也稱爲FS
內部到awk
)是製表符。我們還將輸出字段分隔符(OFS)
設置爲"\t"
。
NF
是一行數據上的字段數。 $i
對於1到NF
之間的每個值都被評估爲$1, $2, $3, ...
。
我們測試$i th
元素是否爲空,if ($i == "")
以及它是什麼時,我們將$i th
元素更改爲包含字符串「NA」。
對於每一行輸入,我們打印行的($0
)值。
在awk
腳本之外,我們將輸出寫入臨時文件,即file > file.new
。 &&
測試awk
腳本沒有錯誤退出,如果正常,則將file.new
移動到原始文件上。根據您的項目需要的安全和安全用例,您可能不想「破壞」您的原始文件。 IHD。
IHTH。
直接的方法是在地方
sed -i 's/^\t/NA\t/;s/\t$/\tNA/;:0 s/\t\t/\tNA\t/;t0' file
sed -i
編輯文件;
s/a/b/
替換a
與b
;
s/^\t/\tNA/
在該行的開頭NA\t
(第一列成爲NA
)替換\t
;
s/\t$/\tNA/
最後一欄相同;
s/\t\t/\tNA\t/
insert NA
in \t\t
;
:0 s///; t0
重複s///
如果有替換(如果有其他缺失值在行中)。
謝謝,看起來像命令缺少'}',但? – orange1
@ orange1:添加說明。你有沒有機會使用'orange'數據科學環境?祝你好運。 – shellter
感謝您的補充說明。實際上,我不是。也給它一個快速谷歌,並找不到它。 – orange1