for 循环中的 cat 文件在循环中将数据格式保留在 1 行上

for 循环中的 cat 文件在循环中将数据格式保留在 1 行上

我有一个名为indexes.out的文件

以下内容位于indexes.out文件中:

informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5

我想创建一个 for 循环,可以一次拉出每一行,保持格式。我正在使用下面的 for 循环命令:

for i in `
cat indexes.out`
do
echo "$i"
done

输出是:

informix
abc_aseld_idx1
informix
abc_aseld_idx2
informix
abc_aseld_idx3
informix
abc_aseld_idx4
informix
abc_aseld_idx5
informix

我希望看到与文件相同的输出,因为我想稍后使用 awk $1 和 $2 来处理循环中的两列:

informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5

进入循环后,我想使用每一行单独过滤特定列。

答案1

默认情况下,for-loop 循环单词,而不是行!

通常,不需要循环,您只需使用awk它即可,循环遍历文件行:

awk '{print $1,$2 ;}' indexes.out

如果您想继续处理 shell 中的数据,可以使用循环whileread

while read a b; do echo "$a $b"; done < indexes.out

其他用途请参考这个相关问题

答案2

我找到了一个适合我的解决方法:

不要在文件中使用空格,而是使用分隔符管道 (|),如下所示:

informix|abc_aseld_idx1
informix|abc_aseld_idx2
informix|abc_aseld_idx3
informix|abc_aseld_idx4
informix|abc_aseld_idx5

一旦进入循环,您可以用如下所示的间距替换管道:

for i in `cat indexes.out`
do
echo "$i" | sed 's/|/ /g
done 

输出是:

informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5

相关内容