逐行读空白列的TSV文件
问题描述:
我正在尝试逐行读取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的塞拉利昂,如果有什么差别。
答
我已经想通了如何回答我的问题是这样的:
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循环的略有不同。不确定是否应该删除该问题。
你知道'day1.ale'有DOS'CRLF'行结束吗? –
我没有想过,但我不明白为什么在这种情况下很重要 –
除了文件大小,它不应该影响'IFS ='\ t''的读取,但我发现它真的很奇怪。我读取并转储了两个版本(原始的和一次运行通过'dos2unix'),至少在Linux上,'read'只是吐出'CRLF',但我不知道mac,因为使用了mac(pre-OSX) 'CR'为行结尾... –