我有一个文件,字段由管道字符分隔,我想只打印第二个字段.此尝试失败:
$ cat file | awk -F| '{print $2}' awk: syntax error near line 1 awk: bailing out near line 1 bash: {print $2}: command not found
有没有办法做到这一点?
或者只使用一个命令:
cut -d '|' -f FIELDNUMBER
这里的关键点是管道字符(|
)必须转义到shell.使用" \|
"或" '|'
"来保护它免受shell干涉,并允许它awk
在命令行上传递.
阅读评论我看到原始海报提供了原始问题的简化版本,其涉及file
在选择和打印字段之前进行过滤.使用了通过grep
,并将结果通过管道传输到awk以进行现场选择.这说明cat file
了问题中出现的完全没有必要(它取代了grep
).
很好,这将工作.但是,awk本身就是一个模式匹配工具,可以信任查找和处理匹配的行而无需调用grep
.使用类似的东西:
awk -F\| '//{print $2;}{next;}' file
该/
位告诉awk
在匹配的行上执行后续操作
.
丢失的{next;}
是跳过输入中下一行的默认操作.它似乎没有必要,但我很久以前就有这个习惯......