【发布时间】:2014-07-28 11:20:14
【问题描述】:
感谢任何帮助。
我在“csv”文件中有以下几行:
11;juan;planA|2014-06-02|3853157|-,planb|2014-08-15|-|-;11111111
12;andrew;planA|2014-07-20|-|-;22222222
我需要产生以下输出:
帐户=11
Name=juan
Phone=11111111
Plan=planA
Expire=2014-06-02
used=3853157
free=
Plan=planB
Expire=2014=08-15
used=
free=
帐户=12
Name=andrew
phone=22222222
Plan=planA
Expire=2014-07-20
used=
free=
我打印前 3 行的 awk 脚本非常简单:
BEGIN { FS=";";
}
{
print("account=")$1;
print("name=")$2;
print("phone=")$4;
}
END {
}
所以,我需要一些灯来生成“计划信息”行的逻辑:
我可以将字段 $3 分配给 $0 变量以仅为字段 3 生成一个完整的新行,并将 FS(文件分隔符)更改为 "," 以拆分计划。然后再次将 $1 分配给 $0 并将 FS 现在更改为“|”拥有打印计划线的字段。
我需要知道的是是否可以更改块代码部分中的 FS 变量..还是我完全错了?
谢谢!
【问题讨论】:
-
你可以使用 split 来实现它..
-
如果可能,请将输入文件格式更改为合理的格式。设计这种文件格式的人应该被公开羞辱。
-
@tripleee:为什么?这是一个经典的多级方案,其优点是
$4总是 是相同的数据项。 PICK/Revelation(虽然已经过时)使用它的多值来做到这一点,ASCII 有不同级别的分隔符(FS/RS/US/GS)等等。顺便说一句,user3717197,FS 是字段分隔符而不是文件分隔符,但我们明白了 :-) -
因为理解和操作都很麻烦,而且无法扩展。在当今时代,结构化的、模糊的自文档格式(如 JSON)将是自然的选择。显然,在过去,它们还没有被发明出来。
-
虽然 JSON 对于 人类 来说可能更容易理解(无需额外的文档),但我怀疑处理它的
awk代码会更加复杂 :-) 并且“不可能”是一个相当强烈的词,您可以在所有维度上非常轻松地扩展该方案(至少在您用完分隔符之前)。我怀疑,这取决于预期使用数据的内容(人、简单程序、内置 JSON 库的复杂程序等)。
标签: variables awk scripting fs