我有一个用管道字符分隔字段的文件,我只想打印第二个字段。此尝试失败:
$ cat file | awk -F| '{print $2}'
awk: syntax error near line 1
awk: bailing out near line 1
bash: {print $2}: command not found
有办法吗?
最佳答案
这里的关键点是必须将管道字符(|
)转义到shell。使用“\|
”或“'|'
”保护它不受shell插入的影响,并允许它在命令行上传递给awk
。
阅读评论后,我发现原来的海报呈现了一个简化版的原始问题,其中涉及在选择和打印字段之前过滤file
。使用一个通过grep
并将结果导入awk进行字段选择。这就解释了问题中出现的完全不必要的cat file
(它取代了grep <pattern> file
)。
好吧,那就行了。然而,awk本身在很大程度上是一个模式匹配工具,可以放心地在不需要调用grep
的情况下查找和处理匹配行。使用类似于:
awk -F\| '/<pattern>/{print $2;}{next;}' file
/<pattern>/
位告诉awk
在符合<pattern>
的行上执行下面的操作。lost looking
{next;}
是一个默认操作,跳过输入中的下一行。似乎没必要,但我很久以前就有这个习惯了。。。