在BASH别名或函数中使用awk

Cor*_*zed 26 bash awk

我有一个在命令行上运行正常的命令,但是当我尝试将它放在别名或函数中时却没有.

$ awk '{print $1}' /tmp/textfile
0
Run Code Online (Sandbox Code Playgroud)

这是正确的,因为'0'在"textfile"的位置1.

$ alias a="awk '{print $1}' /tmp/textfile"
$ a
1 0 136 94
Run Code Online (Sandbox Code Playgroud)

这就是"textfile"中的整行.我已经尝试了各种各样的引号,括号和反引号,我可以想象它们可能会起作用.我可以用各种格式得到同样的问题.

我不明白的是什么?

Lin*_*een 49

你需要逃避$这样的:

 alias a="awk '{print \$1}' /tmp/textfile"
Run Code Online (Sandbox Code Playgroud)

否则你的别名是:

 awk '{print }' /tmp/textfile
Run Code Online (Sandbox Code Playgroud)

打印整个文件...

  • 在这些部分中说谢谢的协议是将答案标记为正确答案(通过单击左侧的小复选标记).=) (7认同)
  • +1如果我是这个问题的拥有者,我很乐意将这一个标记为答案.它解决了我遇到的类似问题. (3认同)

gho*_*g74 12

使用函数而不是别名

myfunc(){ awk '{print $1}' file; }
Run Code Online (Sandbox Code Playgroud)

  • 这当然是更灵活的解决方案,因为它允许引用参数向量。例如,如果您想使用“${1:-hardcoded_filename}”允许以显式默认值传递可选文件名,那么这在这里可以工作,但不能在别名方法中使用。 (2认同)