Answers:
“ -F”是命令行参数,而不是awk语法,请尝试:
echo "1: " | awk -F ":" '/1/ {print $1}'
(pattern){action}
。如果pattern
(主要是条件语句)为true,action
则执行。如果pattern
不可用,true
则暗示。这里pattern
是/1/
其中规定的正则表达式1
在当前记录匹配$0
如果要以编程方式执行此操作,则可以使用FS
变量:
echo "1: " | awk 'BEGIN { FS=":" } /1/ { print $1 }'
请注意,如果您在主循环而不是BEGIN
循环中更改它,则它将影响下一个读入的行,因为当前行已被拆分。
您可以通过多种方式将其设置:
为分隔符:
awk -F: '{print $1}'
awk -v FS=: '{print $1}'
awk '{print $1}' FS=:
awk 'BEGIN{FS=":"} {print $1}'
它们都是等效的,并且对于1
样本输入“ 1:2:3” 将返回:
$ awk -F: '{print $1}' <<< "1:2:3"
1
$ awk -v FS=: '{print $1}' <<< "1:2:3"
1
$ awk '{print $1}' FS=: <<< "1:2:3"
1
$ awk 'BEGIN{FS=":"} {print $1}' <<< "1:2:3"
1
BEGIN
如果我使用文件来存储整个内容,则倾向于使用它,而-F
单行代码则很方便。
awk 'BEGIN{print split("foo:bar",a)}' FS=":" file
和awk 'BEGIN{FS=":"; print split("foo:bar",a)}' file
无需写太多。只需在awk命令中将带有-F选项的所需字段分隔符放在您要打印的列号中,即可按照您提到的字段分隔符进行分隔。
echo "1: " | awk -F: '{print $1}'
1
echo "1#2" | awk -F# '{print $1}'
1
AWK作品文本翻译是去面向行整个文档和那去fieldwise每行因此$ 1,$ 2 .. $ n的每一行的字段引用($ 1是第一个字段,$ 2是第二场等等...)。您可以通过在命令行下或两个带有“ FS = ...”的方括号内使用“ -F”开关来定义字段分隔符。现在考虑“ JUERGEN”的答案:
echo "1: " | awk -F ":" '/1/ {print $1}'
字段边界上方由“:”设置,因此我们有两个字段$ 1(即“ 1”)和$ 2(其为空白)。之后是正则表达式“ / 1 /”,指示过滤器仅输出第一个字段当口译员偶然发现一行包含这样的表达式时(我的意思是1);“ echo”命令的输出是包含“ 1”的一行,因此过滤器将起作用。
处理以下示例时:
echo "1: " | awk '/1/ -F ":" {print $1}'
语法混乱,解释器选择忽略部分F“:”, 并切换到默认字段分隔符,该分隔符为空白,因此输出“ 1:”作为第一个字段,不会有第二个字段!
JUERGEN的答案包含良好的语法...