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

时间:2011-12-09 12:48:07

标签: bash awk

我创建了简单的脚本:

#!/bin/sh
column=${1:-1}
awk '{colawk='$column'+1; print colawk}'

但是当我跑步时:

ls -la | ./Column.sh 4

我收到输出:  五  五  五  5

但我预计会收到第5栏。为什么会出现这个错误?

1 个答案:

答案 0 :(得分:5)

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

#!/bin/sh
let "column=${1:-1} + 1"
awk "{print \$$column}"

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

我会这样做:

#!/bin/sh
let "column=${1:-1}"
awk "{print \$$column}"

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


  

我知道bash。我想用AWK算术

在这种情况下,如何:

#!/bin/sh
column=${1:-1}
awk 'BEGIN{colawk='$column'+1} {print $colawk}'

或者,简单地说:

#!/bin/sh
awk 'BEGIN{colawk='${1:-1}'+1} {print $colawk}'

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

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