我是shell脚本的新手,我正在尝试从以下格式的txt文件中读取数据。
A: 1, 2, 3, 4
B: 1,2; 3, 4
这是我的代码:
awk -F':/,/;/ ' '{ echo $2 $3 $4 $5 $5 }' -f 'testread.txt'
我只需要文本文件中的数字。 感谢。
答案 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)
您的命令存在几个问题。
-F
选项的参数是一个正则表达式,用于指定所需的分隔符。要选择冒号,逗号或分号作为分隔符,您需要使用管道而不是斜杠。或者,您可以使用括号表达式。
输出文字的AWK语句为print
,而不是echo
。
-f
选项是指定包含AWK程序的文件,而不是输入文件。您不需要-f
来指定输入文件。
你想要更像这样的东西:
awk -F '[:,;]' '{ print $2 $3 $4 $5 }' testread.txt