【发布时间】:2020-10-30 14:44:15
【问题描述】:
我对 awk 很陌生,所以如果这是一个微不足道的问题,但我没有找到类似的问题或可以解决我的问题的答案,请道歉。
我想做以下事情: 我有一个由五列组成的制表符分隔的文本文件,如下所示:
Location Indices gene coordinates_1 coordinates_2
190..255 "190, 255" thrL "232, 237" NA
337..2799 "337, 2799" thrA "2094, 2102" NA
2801..3733 "2801, 3733" thrB NA 2855
3734..5020 "3734, 5020" thrC NA NA
现在我想用 0 替换第 4 列(coordinates_1)中的所有“NA”值并保存文件。为此,我编写了以下命令:
awk '
BEGIN { FS = "\t" }
{
if ($4 == "NA")
$4 = 0;
print $0;
}' original_data.txt > NAs_to_zero.txt
我想要的输出应该是这样的:
Location Indices gene coordinates_1 coordinates_2
190..255 "190, 255" thrL "232, 237" NA
337..2799 "337, 2799" thrA "2094, 2102" NA
2801..3733 "2801, 3733" thrB 0 2855
3734..5020 "3734, 5020" thrC 0 NA
但是现在发生的情况是,在将 NA 替换为 0 的每一行中,字段不再由制表符分隔,因此与原始文件不对应。
Location Indices gene coordinates_1 coordinates_2
190..255 "190, 255" thrL "232, 237" NA
337..2799 "337, 2799" thrA "2094, 2102" NA
2801..3733 "2801, 3733" thrB 0 2855
3734..5020 "3734, 5020" thrC 0 NA
我是否必须在命令中的某处重新分配新的分隔符,或者如何实现文件中 NA 被零替换的字段仍然是制表符分隔?
【问题讨论】:
-
是的,您还需要将
OFS设置为tab,例如:FS=OFS="\t" -
是的,将OFS值设置为制表符