쉘 스크립트 명령을 사용하여 행에서 열로 변경

쉘 스크립트 명령을 사용하여 행에서 열로 변경

내 파일을 추출하기 위해 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개의 항목이 있고 두 번째 행에 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

관련 정보