gpt4 book ai didi

linux - 请解释这个用于将固定宽度转换为 CSV 的 awk 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:44 25 4
gpt4 key购买 nike

我正在学习一些 awk。我在网上找到了一个采用固定宽度文件并将其转换为 csv 文件的示例。只有一个部分我不明白,即使在阅读了许多手册页和在线教程之后也是如此:

1: awk -v FIELDWIDTHS='1 10 4 2 2' -v OFS=',' '
2: { $1=$1 ""; print }
3: ' data.txt`

这是在线示例中的逐字记录 (found here)。

我不明白的是第 2 行。我知道没有条件,所以“程序”(包含在括号中)将始终按记录(行)执行。我不明白为什么要执行 $1=$1 以及空字符串语句 "";。但是,删除这些会导致不正确的行为。

最佳答案

$1=$1 为 $1 赋值(恰好与它已有的值相同)。为字段分配任何值都会导致 awk 使用字段之间的 OFS 值重新编译当前记录(有效地用 OFS 替换所有 FS 或 FIELDSEPS 间距)。

$ echo 'a,b,c' | awk -F, -v OFS="-" '{print; $1=$1; print}'
a,b,c
a-b-c

"" 是因为编写脚本的人并不完全理解 awk,并认为有必要通过在赋值之前将数字转换为字符串来确保数字保持其精度。

关于linux - 请解释这个用于将固定宽度转换为 CSV 的 awk 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44163692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com