Pop*_*orn 15 unix linux bash shell
我的剧本
export IFS=":"
cat hello | while read a b c d; do
echo $a,$b,$c,$d
done
Run Code Online (Sandbox Code Playgroud)
我的档案 hello
1:1:1:1
2:2:2:2
3:3:3:3
Run Code Online (Sandbox Code Playgroud)
我的输出
1,1,1,1
2,2,2,2
Run Code Online (Sandbox Code Playgroud)
如果我3:3:3:3在hello之后输入一个空行,则输出变为
1,1,1,1
2,2,2,2
3,3,3,3
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何解决这个问题,所以我不需要在结尾处加一个空行hello?
Sto*_*ica 16
发生的事情是,read当输入未以换行符终止时,命令失败.由于文件末尾缺少换行符read,因此失败,因此while跳过循环的最后一次迭代.
如果你不想/不能确保您的输入文件有在最后一个换行符,你可以将你cat与echo给予的外观被终止换行符的输入,例如像这样:
{ cat hello; echo; } | while read a b c d; do
echo $a,$b,$c,$d
done
Run Code Online (Sandbox Code Playgroud)
或者像这样:
(cat hello; echo) | while read a b c d; do
echo $a,$b,$c,$d
done
Run Code Online (Sandbox Code Playgroud)
如果您不想在最后添加新行,则可以执行以下操作:
while IFS=: read -r a b c d || [ -n "$a" ];
do
echo $a,$b,$c,$d;
done < file
Run Code Online (Sandbox Code Playgroud)
或使用grep:
while IFS=: read -r a b c d;
do
echo $a,$b,$c,$d;
done < <(grep "" filee)
Run Code Online (Sandbox Code Playgroud)
注意:
当且仅当它丢失时,存在一个不太知名的讨厌的黑客来向文本流添加缺少的最终换行符:
sed '$a\'
Run Code Online (Sandbox Code Playgroud)
例如,请参阅有关unix.stackexchange的讨论.
| 归档时间: |
|
| 查看次数: |
12493 次 |
| 最近记录: |