我有一个来自某个命令的多列文本输出,想要逐列打印输出,类似于:
#!/usr/bin/ksh
typeset -i i=0
while [[ $i -lt 5 ]]; do
<command 1> |awk '{print $i}' |<command 2>
i=$i+1
done
我知道在awk中,$i
不能用于指定第i列。这里应该正确使用什么?
假设command 1
的输出结果如下:
"abc" "def" "ghi" "jkm"
"123" "456" "789" "0ab"
"erf" "fad" "dae" "kjh"
该值不一定是三个字符长。这里只是举例。
我想依次获取第一列到第四列,以供命令2
使用。
i
从1到5开始,它能正常工作。但是如果我使用原始的while循环,将i
从0到4迭代,并使用awk -v i="$i+1" '{print $i}'
,它又出现了问题。有什么解决方法吗? - Qiang Xuawk
中$0
有特殊含义,它代表“整个输入行”,而不是该行中的某个字段。如果你想要 awk 的输出结果是第 1-4 列,你可以将值 1..4 作为i
的值,或使用awk -v i=$i '{print $(i+1)}'
。但是,按照你的循环写法,将从 4 个字段生成 5 个输出结果,这可能不是一个好主意。 - Jonathan Leffler$i
初始化为1
即可。 - Chris Seymour