2017-10-29 44 views
0

私はTSV(タブ区切り)ファイルを1行ずつ読み込み、特定の列を処理しようとしています。このコードは、残りの列を1つオフセットするため、列が空白の場合に失敗します。 readで空白の列を正しく処理させるにはどうすればよいですか?ここでTSVファイルを空白の列で1行ずつ読み込みます

input_file="day1.ale" 
while IFS=$'\t' read Name Tracks Start End Take Tape UNC FPS Reel Scene 
do 
echo $FPS 
done < $input_file 

は、サンプルファイルへのリンクです:https://www.dropbox.com/s/isxirf90jpdyp0p/day1.ale?dl=0

それはすべての違いを、私は、私はMacOSのシエラを使用しています言及する必要があります。

+0

'day1.ale'にはDOSの' CRLF'行が終わっていますか? –

+0

私はそれについて考えていませんでしたが、なぜこの状況で問題になるのかわかりません –

+0

ファイルサイズ以外は、 'IFS = '\ t''での読み込みに影響を与えるべきではありませんが、 。私は両方のバージョン(オリジナルと 'dos2unix'を通したもの)を読み込んでダンプし、少なくともLinuxでは' read'が 'CRLF'を吐き出しましたが、Macについてはわかりません。 'CR'行の末尾に... –

答えて

0

私はこのような自分の質問に答える方法を考え出した:

input_file="day1.ale" 
input_data=$(cat $input_file | tr \\11 \\7) # replace tabs with alarm bell 
while IFS=$'\a' read Name Tracks Start End Take Tape UNC FPS Reel Scene 
do 
echo $FPS 
done <<< "$input_data" 

この質問はread in bash on tab-delimited file without empty fields collapsingのほぼ重複しているが、答えはあるため、whileループで若干異なっています。質問を削除するかどうかはわかりません。

関連する問題