データの終わりの最初の行にヘッダーを書き込みます。

データの終わりの最初の行にヘッダーを書き込みます。

read他の関数のデータを操作するループがあります。

ループの作業の1つは、「一部の列」に最も広いテキストを記録することです。

ループの端の幅を印刷し、しかし、問題はそれを出力の上に置くことです。

その後、この読み取りループが並べ替えられ、ファイルに書き込まれます。

簡単に言えばこんな感じです。

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

関連情報