エラーが発生しました、
致命的:パイプを開くことができません(開いているファイルが多すぎます)
#!/bin/bash
output="Out.txt"
trans="DEBIT_TRANSACTION_"
ls *.txt | while read line
do
subName="$(cut -d'.' -f1 <<<"$line")"
awk -F"|" -v var="10|" 'NF!=15; NF==15 && /^[^[:space:]]/{ "echo -n "$6" | tail -c 3" | getline terminalCountry;
if($6 =="") terminalCountry="IND";
$1=var$1;$6=$6"|"terminalCountry; print $0;
}' OFS="|" "$line" > /home/lradmin/script/cboiCC/cboicTxnScrip/OUTPUT/"$subName$output"
done
あなたが抱えている問題は、あなたがあなたにパイプするあなたのコマンドを閉じていないということですgetline
。あなたが書く:
"echo -n "$6" | tail -c 3" | getline terminalCountry
Awkはこれで次のことを行います:
awkプログラムの実行中に同じファイル名または同じシェルコマンドがgetlineで複数回使用された場合、ファイルは最初にのみ開かれます(またはコマンドが実行されます)。その時点で、入力の最初のレコードがそのファイルまたはコマンドから読み取られます。次に同じファイルまたはコマンドがで使用されるとgetline
、別のレコードがそこから読み取られます。
これ$6
は、同一のさまざまなものがある場合、コマンドが最初に正しく機能することを意味します。さらに、コマンドが出力を書き込む「ファイル」も開きます。多くのレコードがある場合、ファイルは継続的に開かれ、決して閉じられないため、エラーが発生します。
正しい動作順序を得るには、「ファイル」を再度閉じる必要があります。つまり、次のように書く必要があります。
command="echo -n \047" $6 "\047 | tail -c 3"
command | getline terminalCountry
close(command)
しかし、ここでは少しやり過ぎのように感じます。興味があるかもしれません。
terminalCountry=substr($6,length($6)-3)
興味深い読み物:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加