假设每行的列数相同,f为文件路径。先用NF获取列数,再通过awk的-v选项自定义变量作为要提取的列,不然外面的变量根本放不进去。
n=$(awk 'NR==1 {print NF}' $f) #先获取每行的列数存储到n上
for (( i=1;i<=n;i++ )); do #循环输出
#使用awk提取特定列直接输出
b=$(awk -v num="$i" '{print $num}' $f)
echo "输出: "$b #这个就一行输出,所需的
echo "输出: $b" #这个会换行输出b
done
设文件内容为
job salary 10 c++ 13 uh java 14 asij php 12 aif
那么关于输出,这里有个很有趣的地方,$b放双引号里面输出会带换行,即类似
输出:job
c++
java
php
而把$b放双引号外面,输出就不会换行,即
输出: job c++ java php
原因搜了一下,具体来说,当使用双引号(")时,Bash 会解析变量和特殊字符。所以 `"输出: $b"` 会被解析为字符串 "输出 " 和变量 `$b` 的值。而 `"输出: "$b` 是将字符串 "输出: " 和变量 `$b` 的值拼接在一起,所以 `$b` 的值会被输出。说实话,没看懂。