Ksh
for 循環中的 cat 文件在循環中保持 1 行上的數據格式
我有一個名為 index.out 的文件
下面的內容在 index.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 and $ 2:
informix abc_aseld_idx1 informix abc_aseld_idx2 informix abc_aseld_idx3 informix abc_aseld_idx4 informix abc_aseld_idx5
一旦進入循環,我想使用每一行單獨過濾特定的列。
我找到了一個對我有用的解決方法:
不要在文件中使用空格,而是使用分隔符管道 (|),如下所示:
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
預設情況下,
for
-loop 循環遍歷單詞,而不是行!通常,不需要循環,您只需使用
awk
它就是這樣做的,循環文件行:awk '{print $1,$2 ;}' indexes.out
如果你想繼續處理 shell 中的數據,你可以使用
while
循環和read
:while read a b; do echo "$a $b"; done < indexes.out
對於其他用途,您應該參考這個相關問題。