【问题标题】:How to loop over multiple values of a field with awk in bash?如何在bash中使用awk遍历字段的多个值?
【发布时间】:2020-08-21 20:46:29
【问题描述】:

我的数据集如下所示:

lastname|name|hash
A|B|C
D|E|
G|H|I J

我需要 bash 中这种格式的数据(最好是 awk)。

{C}% B A
{I}% H G
{J}% H G

用文字表示:只有当第三列 (hash) 有值时,我才想输出。 第三列 (hash) 中可以有 1-n 个值,每个值的输出应如下所示:

{hash}% name lastname

【问题讨论】:

  • 哦-感谢您的指出。那是个错误。

标签: bash awk


【解决方案1】:
BEGIN { 
    FS="|"
}

NR>1 && NF==3 {
    split($3, a, " ")
    for (i=1;i in a;i++) printf("{%s}%% %s %s\n", a[i], $2, $1)
}

我认为上面的awk 已经足够自我解释了。要使用printf 打印文字%,我们必须使用%% 对其进行转义。测试:

> awk -f tst.awk file
{C}% B A
{I}% H G
{J}% H G

【讨论】:

  • 直接作为awk-command 使用会有什么不同吗?
  • @LukasCB 您可以将#!/usr/bin/env -S awk -f 添加为shebang,将其另存为tst,不带.awk 扩展名。使其可执行并使用./tst file 运行它
  • @LukasCB - 会有什么不同吗 - 不,每次你想运行它时都要多输入......
猜你喜欢
  • 2018-10-02
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2018-05-25
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多