在bash中,如何将下一行回送到文件中?

在bash中,如何将下一行回送到文件中?,bash,Bash,我试图检索文件结果的第1列,并将该列放在名为results2的文件中,但问题是我的脚本只写结果的最后一行: for line in $(cat results | cut -d" " -f1); do echo -e "$line">results2; done 您可以在shell中执行以下操作: while read -r col1 rest do printf '%s\n' "$col1" done < results > results2 脚本的问题在于,您

我试图检索文件结果的第1列,并将该列放在名为results2的文件中,但问题是我的脚本只写结果的最后一行

for line in $(cat results | cut -d" " -f1);
do echo -e "$line">results2;
done

您可以在shell中执行以下操作:

while read -r col1 rest
do 
    printf '%s\n' "$col1"
done < results > results2
脚本的问题在于,您在循环中使用了
,这会截断文件并重新打开它以编写每次迭代。您可以通过将整个循环重定向到文件来解决这个问题,但正如我所示,最好的方法就是重定向
cut
的输出


要读取shell中的行,请在读取时使用
循环。但是,请记住,shell的设计并不是为了高效地完成此任务,而这正是标准工具(如
cut
)的用途。

在shell中,您可以像这样做:

while read -r col1 rest
do 
    printf '%s\n' "$col1"
done < results > results2
脚本的问题在于,您在循环中使用了
,这会截断文件并重新打开它以编写每次迭代。您可以通过将整个循环重定向到文件来解决这个问题,但正如我所示,最好的方法就是重定向
cut
的输出


要读取shell中的行,请在读取时使用
循环。但是,请记住,shell的设计并不是为了高效地完成此任务,而这正是标准工具(如
cut
)的目的。

注意,您做得很好,只是每次都使用
截断文件。这就是为什么你最后只能说最后一句话。相反,请使用
>
.awk'{print$1}'results>results2可以根据您的需要进行更改。请注意,您的操作是正确的,只是每次使用
都会截断文件。这就是为什么你最后只能说最后一句话。相反,使用
>
.awk'{print$1}'results>results2可以满足您的需要