我尝试检索文件的第1列结果,并将此列放在名为 results2 的文件中,但问题是我的脚本只写 结果的最后行:
for line in $(cat results | cut -d" " -f1);
do echo -e "$line">results2;
done
答案 0 :(得分:3)
您可以在shell中执行您想要的操作:
while read -r col1 rest
do
printf '%s\n' "$col1"
done < results > results2
......但是这样做更有意义:
cut -d' ' -f1 results > results2
您的脚本存在的问题是您在循环中使用>
,它会截断文件并重新打开它以写入每次迭代。您可以通过将整个循环重定向到文件来解决这个问题,但正如我所示,最好的方法是重定向cut
的输出。
要读取shell中的行,请使用while read
循环; don't read lines with for
。但是,请记住,shell不是为高效执行此任务而设计的,而这正是cut
等标准工具的用途。