Ksh

for 循環中的 cat 文件在循環中保持 1 行上的數據格式

  • July 19, 2019

我有一個名為 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

對於其他用途,您應該參考這個相關問題

引用自:https://unix.stackexchange.com/questions/530979