2010-02-23 44 views
0

我有一件簡單的事情要做,但我是UNIX新手。 所以,我有一個文件,並在每一行我有一個ID。 我需要通過該文件並將所有ID都放入一個變量中。unix ksh循環並將結果存入變量

我試過類似於Java的東西,但不起作用。

for variable in `cat myFile.txt` 
do 
    param=`echo "${param} ${variable}"` 
done 

它似乎並沒有將所有值都添加到參數中。

謝謝。

回答

2

我會使用:

param=$(<myFile.txt) 

參數具有名稱之間的空白(實際上換行)。當不帶引號使用,外殼將擴大那些爲空格,如:

cat $param 

如果用引號使用,文件名仍將在不同的線路,如:

echo "$param" 

注意, Korn shell特殊情況下爲'$(<file)'表示法,並且不分叉並執行任何命令。

另外請注意,您原來的想法,可向更簡單的工作:

param= 
for variable in `cat myFile.txt` 
do 
    param="${param} ${variable}" 
done 

這裏主要介紹在參數前面的空白;它很少有問題。有趣的是,你可以通過使用param="${param}${variable} "來避免前面的空白。這也起作用,不會搞砸,儘管它看起來好像將事情堵在一起。另外,'${var}'表示法不是必需的,但它也沒有害處。

而且,最後現在,最好用'$(cat myFile.txt)'替換back-tick命令。當你需要嵌套的命令的區別就變得至關重要:

perllib=$(dirname $(dirname $(which perl)))/lib 

VS

perllib=`dirname \`dirname \\\`which perl\\\`\``/lib 

我知道這是我喜歡類型(和閱讀)!

+0

它看起來不錯,但有相同的結果。我只有最後一行和之前的一半。 我的txt文件有什麼問題? – 2010-02-23 15:56:51

+0

@CC:CRLF行結尾?和in一樣,這個文件來自DOS,所以你在變量中看到的是'name1 \ rlongername \ rn3',輸出顯示'n3ngername'。 ''\ r''表示回車。 – 2010-02-23 15:59:10

+0

我明白了。其實我的txt文件不是UNIX格式。我剛剛打開文件並從我的編輯器中選擇了UNIX格式。我想一定有一些不可見的特殊字符。 非常感謝大家。 – 2010-02-23 16:00:01

0

試試這個:

param=`cat myFile.txt | tr '\n' ' '` 

tr命令tr anslates \n(新線),所有出現的空間。然後我們將結果賦給param變量。

可愛。

+0

有遺漏。 在我的文件我有類似的東西: ....... AAA_4436188 在參數所有我是3793536188,所以最後一行和前一次的一半。 – 2010-02-23 15:46:56

+0

你能發佈一個更完整的文件片段嗎? – 2010-02-23 15:51:11

+0

這是一個用CR搞砸東西的DOS文件 - 請參閱我的答案下面的評論。 – 2010-02-23 16:01:46

0

AWK

var=$(awk '1' ORS=" " file) 

KSH

while read -r line 
do 
    t="$t $line" 
done < file 
echo $t 
+0

實際上要顯示它,它可以工作,但我不能把它放入一個變量/ 我可以顯示所有行。 – 2010-02-23 15:54:11

0
param="$(< myFile.txt)" 

while read line 
do 
    param="$param$line"$'\n' 
done < myFile.txt