我有这个功能:
field_get() {
while read data; do
echo $data | awk -F ';' -v number=$1 '{print $number}'
done
}
可以这样使用:
cat filename | field_get 1
为了从一些管道输入中提取第一个字段。这行得通,但我在每一行上迭代,它比预期的要慢。
有人知道如何避免这种迭代吗?
我尝试使用:
stdin=$(cat)
echo $stdin | awk -F ';' -v number=$1 '{print $number}'
但是换行符丢失了,它将所有标准输入视为一行。
重要提示:我需要通过管道输入,因为通常我不必只 cat 一个文件。假设文件是多行的,问题实际上是这样的。我知道我可以使用“awk something filename”,但这对我没有帮助。
最佳答案
只是丢掉 while
。 awk 本身就是一个 while 循环:
field_get() {
awk -F ';' -v number=$1 '{print $number}'
}
$ echo 1\;2\;3 | field_get 2
2
更新:
不确定您对多行管道和文件的评论是什么意思,但是:
$ cat foo
1;2
3;4
$ cat foo | field_get 1
1
3
关于linux - 在 Bash 函数中优化多行管道到 Awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48560802/