【问题标题】:Reading data from a file using awk使用awk从文件中读取数据
【发布时间】:2012-04-16 16:25:59
【问题描述】:

我是 shell 脚本的新手,我正在尝试从以下格式的 txt 文件中读取数据。

A: 1, 2, 3, 4

B: 1,2; 3, 4

这是我的代码:

awk -F':/,/;/ ' '{ echo $2 $3 $4 $5 $5 }' -f 'testread.txt'

我只需要文本文件中的数字。 谢谢。

【问题讨论】:

    标签: bash parsing unix awk


    【解决方案1】:

    最简单的方法可能就是让你的字段分隔符“任何不是数字的东西”。

    [ghoti@pc ~]$ cat input.txt 
    A: 1, 2, 3, 4
    B: 1,2; 3, 4
    [ghoti@pc ~]$ awk -F'[^0-9]+' '{$1=$1; print;}' input.txt 
     1 2 3 4
     1 2 3 4
    [ghoti@pc ~]$ 
    

    $1=$1 位只是强制 awk 使用默认输出字段分隔符重写 $0

    更新:

    更明确的输出:

    [ghoti@pc ~]$ awk -F'[^0-9]+' '{printf("1=%s 2=%s 3=%s 4=%s 5=%s\n", $1, $2, $3, $4, $5);}' input.txt 
    1= 2=1 3=2 4=3 5=4
    1= 2=1 3=2 4=3 5=4
    [ghoti@pc ~]$ 
    

    【讨论】:

    • 非常感谢。我明白你做了什么,但我还必须稍后使用这些数字进行进一步计算。我将如何使用这种方法来做到这一点?
    • 好吧,你想对这些数字做什么?在上述情况下,$2$3 等的值都是原始脚本中的值。 $0 的打印只是为了方便。看到 1 之前的空格了吗?那是字段分隔符,因为您的输入文件中在第一个非数字数据字符串之前没有数字。
    • 我想将它们分配给一些变量。我有不同大小的矩阵,需要在它们之间做简单的加减法。
    • 好吧,我已经向您展示了(以及对我的答案的更新)如何访问各个字段。您的问题没有提及矩阵或算术。也许这是另一个问题的素材?据我所知,这个问题已经得到了回答。
    • 是的,我明白了。非常感谢!
    【解决方案2】:

    你的命令有几个问题。

    1. -F 选项的参数是指定所需分隔符的正则表达式。要选择冒号、逗号或分号作为分隔符,您需要使用竖线,而不是斜线。或者,您可以使用括号表达式。

    2. 用于输出文本的 AWK 语句是 print,而不是 echo

    3. -f 选项用于指定包含 AWK 程序的文件,而不是输入文件。您不需要-f 来指定输入文件。

    你想要更像这样的东西:

    awk -F '[:,;]' '{ print $2 $3 $4 $5 }' testread.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 2019-07-31
      • 2019-04-13
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 2015-12-21
      相关资源
      最近更新 更多