
次の問題があります:スクリプト
#!/usr/bin/ksh
for unitcaseno in `cat /pims/nigel/UNLOAD-DB/xaa`
do
echo "String = $unitcaseno"
unitno=`echo $unitcaseno | cut -d'|' -f1`
caseno=`echo $unitcaseno | cut -d'|' -f2`
echo "Unitno = $unitno:Caseno = $caseno"
break
done
ファイルはかなり大きく、最初の録音後に壊れていました。
Sample file:
349702| 1|
349702| 1|
349702| 1|
1133247| 6|
1133247| 6|
12708 | 1|
12708 | 1|
299466 | 2|
299466 | 2|
299466 | 2|
299466 | 2|
501877 | 1|
501877 | 1|
55871 | 9|
55871 | 9|
64239 | 7|
64239 | 7|
出力
String = 349702|
Unitno = 349702:Caseno =
私の問題は、2つの出力のうち2番目のフィールドが印刷されないことです。
答え1
あなたが経験している問題は
for unitcaseno in `cat /pims/nigel/UNLOAD-DB/xaa`
構造。これにより、ファイルが次に分割されます。性格、行ではありません。これがString = 349702
出力で見ることができる理由です。完全な行ではなく、最初の単語だけを見ることができます。
代わりに、次のような機能を検討してください。
while read unitcaseno
do
....
done < /pims/nigel/UNLOAD-DB/xaa
これで一度に1行ずつ処理します。
String = 349702| 1|
Unitno = 349702:Caseno = 1
以前に余分なスペースなどの他の問題があることに注意してくださいCaseno
。しかし、これは次のステップに進むことができます!