我想从radius.dat打印我的第一列和第二列,并将其保存到rad.2.out,第一列,第三列为rad.3.out,依此类推。
然而,这个脚本似乎并没有起作用。
#!/bin/bash
for i in {2..30}
do
awk '{print $1, $i}' radius.dat > 'rad.'$i'.out'
done
答案 0 :(得分:2)
使用awk
即可:
awk '{for(i=2;i<=NF;i++) print $1, $i > ("rad."i".out")}' radius.dat
唯一需要注意的是,它会导致许多打开的文件,如果你不在古代awk
上,这可能不是问题。
我们在这里做的基本上是使用迭代器并从第二个开始迭代遍历列,并在每次迭代期间使用命名约定将第一列和迭代器打印到输出文件。
如果您发现too many open files
错误,则可以执行以下操作:
awk '{
for (i=2; i<=NF; i++) {
print $1, $i >> ("rad."i".out");
close("rad."i".out")
}
}' file
请注意,在第二个选项中,我们使用>>
代替>
。这是因为我们在每次迭代后关闭文件,因此我们需要确保不会覆盖现有文件。
答案 1 :(得分:0)
你的报价很不合适...... awk
永远不会得到专栏。试试这个:
#!/bin/bash
for i in {2..30}; do
awk "{print \$1, \$$i;}" radius.dat > "rad.$i.out"
done