是否可以将2个命令放在awk中的一个字符串中?

use*_*430 1 bash awk

我创建了简单的脚本:

#!/bin/sh
column=${1:-1}
awk '{colawk='$column'+1; print colawk}'
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时:

ls -la | ./Column.sh 4
Run Code Online (Sandbox Code Playgroud)

我收到输出:5 5 5 5

但我预计会收到第5列.为什么这个错误?

Sha*_*hin 5

我相信这会做你在你的例子中尝试过的事情:

#!/bin/sh
let "column=${1:-1} + 1"
awk "{print \$$column}"
Run Code Online (Sandbox Code Playgroud)

但是,我不明白你为什么要在列索引中添加一个?然后,您将无法直观地访问第一列.

我会这样做:

#!/bin/sh
let "column=${1:-1}"
awk "{print \$$column}"
Run Code Online (Sandbox Code Playgroud)

参数./Column.sh将是您想要的列号,0将为您提供所有列,而不带参数的调用将默认列索引1.


我知道bash.我想用AWK算术

在那种情况下,怎么样:

#!/bin/sh
column=${1:-1}
awk 'BEGIN{colawk='$column'+1} {print $colawk}'
Run Code Online (Sandbox Code Playgroud)

或者,简单地说:

#!/bin/sh
awk 'BEGIN{colawk='${1:-1}'+1} {print $colawk}'
Run Code Online (Sandbox Code Playgroud)

我在脚本中更改了两件事:

  1. 将算术放在一个BEGIN{}块中,因为它只需要完成一次而不是为每个输入行重复.
  2. " print $colawk"而不是" print colawk"所以我们打印索引的列colawk而不是它的值.