2017-10-29 63 views
0

我正在尝试逐行读取TSV(制表符分隔)文件并处理某些列。当一个列为空时,此代码会失败,因为它会将其余列删除一个。我怎样才能让read正确处理空白栏?逐行读空白列的TSV文件

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,因为使用了mac(pre-OSX) '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循环的略有不同。不确定是否应该删除该问题。