首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令从输入中打印特定列。

命令从输入中打印特定列。
EN

Stack Overflow用户
提问于 2014-10-29 20:04:14
回答 2查看 238关注 0票数 0

我想知道是否有一些内置的其他命令可以从输入中打印N列。例如awk '{print $2}'cut...

当我想通过ssh运行管道输出时,它会使生活变得更容易(引用总是很糟糕的话),当然,它将使生活更轻松。

我目前有100个限制的黑客是:

代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-29 21:23:49

重写

代码语言:javascript
复制
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:您不必捕获它并将其输入awk --优点是:只调用一个awk调用,而不是每行一个。
  • 您不需要对字段列表进行任何粗略的预处理。特别是,你为什么要在时间循环中这样做?
  • 你为什么要使用函数和别名?
票数 2
EN

Stack Overflow用户

发布于 2014-10-29 22:14:41

你想要容易安装的东西。只需在~/.bashrc文件中放置以下行:

代码语言:javascript
复制
 printcol() { fields=$(printf '$%i,' "$@"); awk -v OFS='\t' "{ print ${fields%%,} }"; }

调用它就像您正在做的那样:

代码语言:javascript
复制
ls -ltr | printcol 1 9
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26639607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档