awk - 当我使用 awk 替换一个值时,为什么我的字段分隔符会弄乱?
问题描述
我对 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 被零替换的每一行中,字段不再由制表符分隔,因此与原始文件不对应。
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 被零替换的字段仍然是制表符分隔?
解决方案
是的,awk
有单独的变量来控制输入和输出字段分隔符。两者的默认值都是空格字符。$0
如果任何字段被 的当前值更改,则将重建的内容OFS
,这就是为什么您只看到与给定条件匹配的行更改为空格的原因。
此外,您可以将代码简化为(参见https://backreference.org/2010/02/10/idiomatic-awk/)
awk 'BEGIN{FS=OFS="\t"} $4=="NA"{$4=0} 1'
推荐阅读
- javascript - React - 地图问题,空段落
- ssas - 为什么维度取决于MDX中的属性
- python-3.x - 使用 StackAPI for Python 添加过滤器以查看答案正文
- python - 在 Deepstream SDK 中使用自定义 python 应用程序时帧率下降
- flutter - 删除 AlertDialog 内容和操作之间的垂直间距
- angular - 特定 json 元素的拖放区域 *ngFor
- swift - 初始化器 SwiftUI 中的变量
- html - 使用 CSS 使 Table thead fix 和 tbody 滚动
- github - 在 git pull 请求之后我该如何做 git rebase?
- html - 添加更多 CSS 样式时的样式问题