在BASH中获取行的第n列的最短方法

在BASH中获取行的第n列的最短方法,bash,awk,cut,Bash,Awk,Cut,这项工作: echo column1 column2 | awk'{print$2}' 这短了一个字符: 回声柱1柱2 |切割-d“-f 1 有没有更简单的方法 kent$ echo column1 column2|grep -Eo '\S*$' column2 kent$ echo column1 column2|awk '$0=$2' column2 kent$ echo column1 column2|sed 's/.* //' column2 这假设echo…

这项工作:


echo column1 column2 | awk'{print$2}'

这短了一个字符:


回声柱1柱2 |切割-d“-f 1

有没有更简单的方法

kent$  echo column1 column2|grep -Eo '\S*$'
column2

kent$  echo column1 column2|awk '$0=$2'    
column2

kent$  echo column1 column2|sed 's/.* //'
column2
这假设echo…部分已修复。

您可以尝试以下操作:

awk '$0=$2'

假设您对shell使用
bash
,那么数组可以很好地实现这一点,并避免分叉外部进程:

$ x="one two three"
$ y=(${x})                 # note - no quotes, so we split on spaces
$ echo ${y[1]}
two
$

echo column2
是最简单的方法,因为它不需要管道,并且使用echo之外的零字符。

您可以定义自定义命令,例如/usr/bin中的shell脚本。如果使用1个字符的脚本名称,则命令长度为1个字符。然而,我不认为减少这个游戏的chars有什么意义。这个问题似乎离题了,因为它是关于代码高尔夫的。请改为尝试。这取决于OP是否希望在第2列中没有值时打印空行。这个答案并不正确。