열의 행 간 차이를 계산하는 방법은 무엇입니까?

열의 행 간 차이를 계산하는 방법은 무엇입니까?

다음과 같은 출력이 있는 경우. 열에는 8개의 행이 있습니다.

1
2
3
4
5
6
7
8

나는 이와 비슷한 출력을 원합니다.

1-3 
2-4
3-5
4-6
5-7
6-8

사실 나는 이 차이의 결과만을 원한다.

답변1

이것은 아마도 당신이 요구하는 것입니다 :

$ seq 8 | awk -v d=2 'NR>d{print a[(NR-d)%d] "-" $0} {a[NR%d]=$0}'
1-3
2-4
3-5
4-6
5-7
6-8

아니면:

$ seq 8 | awk -v d=2 'NR>d{print a[(NR-d)%d] - $0} {a[NR%d]=$0}'
-2
-2
-2
-2
-2
-2

답변2

루프와 함께 awk를 사용하여 차이를 계산할 수 있습니다.

awk '{a[NR]=$1} END {for(i=1;i<=NR-2;i++) print a[i]-a[i+2]}' data.txt

이 인용된 버전은 다음 "-"과 같이 결과를 출력합니다 1-3.

awk '{a[NR]=$1} END {for(i=1;i<=NR-2;i++) print a[i]"-"a[i+2]}' data.txt

답변3

사용행복하다(이전 Perl_6)

~$ raku -e ' my @a = lines(); my @b = @a[2..*]; .put for [Z-] @a, @b;'  file

입력 예:

1
2
3
4
5
6
7
8

예제 출력:

-2
-2
-2
-2
-2
-2

Raku는 Perl 계열의 프로그래밍 언어입니다. 원래 이름은 "Perl6"으로 2019년에 "Raku"로 변경되었습니다. Raku에서 일부 고급 연산자를 찾을 수 있습니다. 위의 내용은 lines모두 배열로 읽혀집니다 @a. 그런 다음 첫 번째 배열을 복사하여 @b배열을 만듭니다.@a[2..*]글꼴 없음처음 두 요소. 마지막으로 데이터는 목록(예: 및 )을 가져와 개별 요소를 하나씩 추출한 다음 결합하는 putRaku의 [Z]Z 감소 메타 연산자를 사용하여 출력됩니다. 이 경우에는 빼기 기호가 포함된 복합 연산자에 의해 조합이 안내됩니다. 이는 Raku에게 첫 번째 요소에서 두 번째 요소를 빼도록 지시합니다.@a@b[Z-]


더 흥미로운 숫자 목록을 보려면 grep최대 1000까지의 정수 목록에서 소수를 ping해 보세요. 아래의 기본 연산자는 [Z]초기 결과를 보여줍니다.

~$ raku -e ' my @a = grep &is-prime, ^1000; my @b = @a[2..*]; .say for [Z] @a[0..7], @b[0..7];' 
(2 5)
(3 7)
(5 11)
(7 13)
(11 17)
(13 19)
(17 23)
(19 29)

이제 [Z-]복합 축소 메타 연산자를 사용하십시오.

~$ raku -e ' my @a = grep &is-prime, ^1000; my @b = @a[2..*]; .say for [Z-] @a[0..7], @b[0..7];'
-3
-4
-6
-6
-6
-6
-6
-10

https://docs.raku.org/언어/operators.html#Reduction_metaoperators
https://docs.raku.org/routine/is-prime.html
https://docs.raku.org/언어.html
https://raku.org

관련 정보