我有一个用管道字符分隔字段的文件,我只想打印第二个字段。此尝试失败:

$ 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;}是一个默认操作,跳过输入中的下一行。似乎没必要,但我很久以前就有这个习惯了。。。

08-27 21:45
查看更多