![쉘 스크립트를 사용하여 2개의 열로 파일 작성](https://rvso.com/image/154447/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%202%EA%B0%9C%EC%9D%98%20%EC%97%B4%EB%A1%9C%20%ED%8C%8C%EC%9D%BC%20%EC%9E%91%EC%84%B1.png)
두 개 이상의 열로 출력 파일에 변수를 인쇄하려면 어떻게 해야 합니까( echo
예를 사용하여)? 나는 다음을 가지고 있습니다 :
grep -oP 'value\s*=\s*\K.*' file >x_vs_y # x values
for X in $(seq 0 50 400)
do
echo "$X" >>x_vs_y # y values
done
출력: (x_vs_y)
1.08759432363
1.08477216702
1.08211988431
1.07947977045
1.07685185457
1.07423631941
1.07163282502
1.06904156798
1.06646245052
0
50
100
150
200
250
300
350
400
이 스크립트를 사용하면 단일 열(18x1)에 출력 파일을 얻지만 다음과 같은 9x2 배열(X 대 Y)을 얻고 싶습니다.
출력: (x_vs_y)
1.08759432363 0
1.08477216702 50
1.08211988431 100
1.07947977045 150
1.07685185457 200
1.07423631941 250
1.07163282502 300
1.06904156798 350
1.06646245052 400
답변1
다음 입력 파일을 고려하십시오.
$ cat file
value = 1.08759432363
value = 1.08477216702
value = 1.08211988431
value = 1.07947977045
value = 1.07685185457
value = 1.07423631941
value = 1.07163282502
value = 1.06904156798
value = 1.06646245052
두 개의 열을 인쇄하려면:
$ awk '{print x+0, $3; x+=50}' file
0 1.08759432363
50 1.08477216702
100 1.08211988431
150 1.07947977045
200 1.07685185457
250 1.07423631941
300 1.07163282502
350 1.06904156798
400 1.06646245052
출력을 파일로 저장
$ awk '0==a[$0]++' file >outfile
$ cat outfile
value = 1.08759432363
value = 1.08477216702
value = 1.08211988431
value = 1.07947977045
value = 1.07685185457
value = 1.07423631941
value = 1.07163282502
value = 1.06904156798
value = 1.06646245052
답변2
paste
어쩌면 와 의 조합이 seq
더 간단할 수도 있습니다:
paste datafile <( seq 0 50 $(( ($(wc -l datafile | cut -d' ' -f1 )-1)*50 )) ) > output
마지막 값은 seq
입력 데이터 파일의 행 번호를 기반으로 합니다.