저는 인턴십을 더 쉽게 하기 위해 bash를 사용하기 시작했습니다. 따라서 나의 초기 시도가 너무 목표에서 벗어나 도움이 되지 않았다면 미리 사과드립니다. 설명을 요청하시기 바랍니다.
내 입력은 다음과 같습니다
Set1
1
2
3
4
Set2
5
6
7
8
내 출력은 다음과 같습니다.
group1 1 5
group1 2 6
group2 3 7
group2 4 8
그래서 난 할 수 있어
A=$(sed -n '2p' input)
B=$(sed -n '7p' input)
printf "group1\t$A\t$B" >> output
그리고 이 작업을 3번 반복합니다.
문제는 실제로 4개의 숫자로 구성된 2세트가 아니라 각각 34개의 숫자로 구성된 7세트가 있으므로 총 200-300개 정도라는 것입니다. 그래서 이 작업을 자동화하는 스크립트를 만들고 싶었습니다.
처음 17개 숫자(그룹 1)에 대해 다음이 있습니다.
#!/bin/bash
##############################################################################
#group1
for (( i=0; i<=16; i++ )) ;
do
A=$(echo "scale=1;x=2+$i; x" |bc -l)
B=$(echo "scale=1;x=128+$i; x" |bc -l)
C=$(sed -n "$Ap" input)
D=$(sed -n "$Bp" input)
printf "group1\t$C\t$D\n" >> output
done
물론 전혀 작동하지 않는 데에는 여러 가지 이유가 있을 수 있습니다. 우선, 줄 번호에 대한 입력으로 변수를 사용하여 특정 줄을 필터링하는 데 실제로 sed를 사용할 수 없습니다. 이것은 현재 내 오류이지만 더 많은 오류가 있을 것으로 생각됩니다. 나는 다른 접근 방식에 열려 있습니다.
- 두 개의 행 번호를 입력으로 사용하여 단일 행을 따라 열로 정렬하는 자동 방법이 있습니까?
- 이 행을 다른 열로 시작하는 자동 방법이 있습니까? 그룹 1/그룹 1/그룹 2/그룹 2?
어떤 조언이라도 감사드립니다.
답변1
데이터를 열화하는 빠르고 더러운 방법을 원한다면 시도해 볼 수 있습니다.pr
pr -t -2 input
Set1 Set2
1 5
2 6
3 7
4 8
pr -t -7 input17x7
Set1 Set2 Set1 Set2 Set1 Set2 Set1
1 a 1 a 1 a 1
2 b 2 b 2 b 2
3 c 3 c 3 c 3
4 d 4 d 4 d 4
5 e 5 e 5 e 5
6 f 6 f 6 f 6
7 g 7 g 7 g 7
8 h 8 h 8 h 8
9 i 9 i 9 i 9
10 j 10 j 10 j 10
11 k 11 k 11 k 11
12 l 12 l 12 l 12
13 m 13 m 13 m 13
14 n 14 n 14 n 14
15 o 15 o 15 o 15
16 p 16 p 16 p 16
17 q 17 q 17 q 17
더 나은 제어를 위해 유틸리티가 있습니다 rs
. 예를 들어 다음과 같이 할 수 있습니다.
{ printf 'Group\n' ; printf 'group%d\n' {1..17} ; cat input17x7; } | rs -et 18 8
Group Set1 Set2 Set1 Set2 Set1 Set2 Set1
group1 1 a 1 a 1 a 1
group2 2 b 2 b 2 b 2
group3 3 c 3 c 3 c 3
group4 4 d 4 d 4 d 4
group5 5 e 5 e 5 e 5
group6 6 f 6 f 6 f 6
group7 7 g 7 g 7 g 7
group8 8 h 8 h 8 h 8
group9 9 i 9 i 9 i 9
group10 10 j 10 j 10 j 10
group11 11 k 11 k 11 k 11
group12 12 l 12 l 12 l 12
group13 13 m 13 m 13 m 13
group14 14 n 14 n 14 n 14
group15 15 o 15 o 15 o 15
group16 16 p 16 p 16 p 16
group17 17 q 17 q 17 q 17
헤더가 필요하지 않으면 결과를 파이프하세요.tail -n +2