我想知道是否有一些内置的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循环中这样做?
为什么要使用函数和别名?