有一个read
循环来操作另一个函数的数据。
循环中的任务之一是在“某些列”中记录最宽的文本。
在循环结束时打印出宽度,但问题是将它放在输出的顶部。
然后再次对该读取循环进行排序并写入文件。
简而言之,是这样的:
get_data() {
echo "3 A B C"
echo "2 A BB C"
echo "4 A B CCCC"
echo "1 A B CC"
}
make_file() {
file_out=$1
{
w3=0 # max width field 3
w4=0 # max width field 4
while read -r f1 f2 f3 f4; do
[ "${#f3}" -gt "$w3" ] && w3=${#f3}
[ "${#f4}" -gt "$w4" ] && w4=${#f4}
# + various other manipulation of the data
echo "$f1 $f2 $f3 $f4"
done< <(get_data)
# Print width data at top of file:
echo "$w3 $w4" >"$file_out"
} | {
#sed -u '$q'
sort -n
} >>"$file_out"
}
make_file test001
$ cat test001
2 4
1 A B CC
2 A BB C
3 A B C
4 A B CCCC
问题是这对于管道等是否安全?最后一个追加可以在第一个追加(写入头数据)>>file_out
之前调用吗?>file_out
例如;是否可以在循环stdout
中刷新while read
并在结束sort
之前处理后续写入?while