我有一个名为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 中的数据,可以使用循环while
和read
:
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