使用awk从文件中读取数据

时间:2012-04-03 01:46:42

标签: bash parsing unix awk

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

A: 1, 2, 3, 4

B: 1,2; 3, 4

这是我的代码:

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

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

2 个答案:

答案 0 :(得分:2)

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

[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 ~]$ 

答案 1 :(得分:2)

您的命令存在几个问题。

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

  2. 输出文字的AWK语句为print,而不是echo

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

  4. 你想要更像这样的东西:

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