シェルスクリプトコマンドを使用して行から列に変更

シェルスクリプトコマンドを使用して行から列に変更

私のファイルを抽出するためにUNIX言語を使用しています。このコマンドを使用して抽出します。

value_1=$(cat tmp.csv | head -1001 | cut -f 3-6 -d','> tmp1.csv)
value_2=$(cat tmp.csv | head -2002 | tail -1001 | cut -f 4-6 -d','> tmp2.csv)
paste -d ',' tmp1.csv tmp2.csv > final.csv

私の "tmp.csv"ファイルは次のとおりです。

0   0   0   17.92204    -3.017933   35.14229
1   0   1   18.27151    -3.179997   35.20044
2   0   2   18.22776    -3.566021   34.87167
                      .
                      .
0   1   0   20.89817    -2.37854    66.51003
1   1   1   21.48396    -2.461451   66.48988
2   1   2   21.78348    -2.575202   66.51389

しかし、結果はこうです。

0   17.92204    -3.017933   35.14229
    20.89817    -2.37854    66.51003
1   18.27151    -3.179997   35.20044
    21.48396    -2.461451   66.48988
2   18.22776    -3.566021   34.87167
    21.78348    -2.575202   66.51389

私は次のような結果を得たいと思います:

0   17.92204    -3.017933   35.14229    20.89817    -2.37854    66.51003
1   18.27151    -3.179997   35.20044    21.48396    -2.461451   66.48988
2   18.22776    -3.566021   34.87167    21.78348    -2.575202   66.51389

手動で行わずにこれを達成できるかどうか疑問に思います。

答え1

最初の行に4つの項目があり、2行目に3つの項目があるという事実に基づいてこれに基づいている場合は、awkを使用して次のようにできます。

$ cat input-file | awk '{if(NF==4){aa=$0} else {print aa" "$0;}}' > output-file

答え2

あなたの質問で言及した以前の出力はFinal.csvの出力であると考えられます。

0   17.92204    -3.017933   35.14229
    20.89817    -2.37854    66.51003
1   18.27151    -3.179997   35.20044
    21.48396    -2.461451   66.48988
2   18.22776    -3.566021   34.87167
    21.78348    -2.575202   66.51389

このコマンドを使用してください

cat final.csv | sed "N;s/\n/ /g"

出力

0   17.92204    -3.017933   35.14229     20.89817    -2.37854    66.51003
1   18.27151    -3.179997   35.20044     21.48396    -2.461451   66.48988
2   18.22776    -3.566021   34.87167     21.78348    -2.575202   66.51389

関連情報