我有一件簡單的事情要做,但我是UNIX新手。 所以,我有一個文件,並在每一行我有一個ID。 我需要通過該文件並將所有ID都放入一個變量中。unix ksh循環並將結果存入變量
我試過類似於Java的東西,但不起作用。
for variable in `cat myFile.txt`
do
param=`echo "${param} ${variable}"`
done
它似乎並沒有將所有值都添加到參數中。
謝謝。
我有一件簡單的事情要做,但我是UNIX新手。 所以,我有一個文件,並在每一行我有一個ID。 我需要通過該文件並將所有ID都放入一個變量中。unix ksh循環並將結果存入變量
我試過類似於Java的東西,但不起作用。
for variable in `cat myFile.txt`
do
param=`echo "${param} ${variable}"`
done
它似乎並沒有將所有值都添加到參數中。
謝謝。
我會使用:
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
我知道這是我喜歡類型(和閱讀)!
試試這個:
param=`cat myFile.txt | tr '\n' ' '`
的tr
命令tr
anslates \n
(新線),所有出現的空間。然後我們將結果賦給param變量。
可愛。
有遺漏。 在我的文件我有類似的東西: ....... AAA_4436188 在參數所有我是3793536188,所以最後一行和前一次的一半。 – 2010-02-23 15:46:56
你能發佈一個更完整的文件片段嗎? – 2010-02-23 15:51:11
這是一個用CR搞砸東西的DOS文件 - 請參閱我的答案下面的評論。 – 2010-02-23 16:01:46
AWK
var=$(awk '1' ORS=" " file)
KSH
while read -r line
do
t="$t $line"
done < file
echo $t
實際上要顯示它,它可以工作,但我不能把它放入一個變量/ 我可以顯示所有行。 – 2010-02-23 15:54:11
param="$(< myFile.txt)"
或
while read line
do
param="$param$line"$'\n'
done < myFile.txt
它看起來不錯,但有相同的結果。我只有最後一行和之前的一半。 我的txt文件有什麼問題? – 2010-02-23 15:56:51
@CC:CRLF行結尾?和in一樣,這個文件來自DOS,所以你在變量中看到的是'name1 \ rlongername \ rn3',輸出顯示'n3ngername'。 ''\ r''表示回車。 – 2010-02-23 15:59:10
我明白了。其實我的txt文件不是UNIX格式。我剛剛打開文件並從我的編輯器中選擇了UNIX格式。我想一定有一些不可見的特殊字符。 非常感謝大家。 – 2010-02-23 16:00:01