다음과 같은 출력이 있는 경우. 열에는 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..*]
글꼴 없음처음 두 요소. 마지막으로 데이터는 목록(예: 및 )을 가져와 개별 요소를 하나씩 추출한 다음 결합하는 put
Raku의 [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