我想知道是否有一些内置的otherwise命令可以从输入中打印第n列。例如awk '{print $2}'cut...
当我想在管道输出上运行它,而通过ssh运行它时(引用它总是一个地狱),它会让生活变得更容易,当然,它会让一般的生活变得更容易。
我目前的100个限制是:

function _printcol(){
    while read data; do
        [ -z "$fields" ] && fields=`for num in "$@"; do echo -n "\"\t\",\\$$num"; done`
        echo $data | awk "{ print $fields }"
    done
}
alias printcol=_printcol
ls -ltr | printcol 9
ls -ltr | printcol 1 9

我想知道是否有人已经实施了。我更希望它是内置的,或者尽可能广泛地提供(比如在多个股票发行版上),或者在最坏的情况下易于安装(比如百胜,apt,…)。

最佳答案

重写

printcol() {
    awk -v "fields=$*" '
        BEGIN { n = split(fields, f) }
        {
            for (i=1; i<=n; i++) {
                printf "%s%s", $(f[i]), OFS
            }
            print ""
        }
    '
}

seq 50 | pr -T5 | printcol 2 4 5

笔记:
awk将读取函数的stdin:you不必捕获它并将其馈送到awk中——优点:只有一个awk调用,而不是每行一个。
不需要对字段列表进行任何粗略的预处理。特别是,你为什么要在while循环中这样做?
为什么要使用函数和别名?

10-07 16:53