이런 것을 편집하고 싶습니다.
ABC
abc
123
다음과 같이 됩니다.
Aa1Bb2Cc3
답변1
awk를 사용하십시오.
awk '
{ a[NR] = $0 }
END {
n = length(a[1])
for (i=1; i<=n; i++) {
for (j=1; j<=NR; j++) {
printf "%s", substr(a[j],i,1)
}
}
print ""
}
' file
Aa1Bb2Cc3
답변2
awk
예를 들어, 문자열 길이가 정확히 3자라고 가정하면 이렇게 할 수 있습니다. 예를 들어 다음과 같이 해보세요:
awk 'BEGIN {FS="" } {a=a$1;b=b$2;c=c$3} END {print a b c}' input_file >output_file
선의 길이가 다르고 일정하다면 다음과 같이 사용할 수 있습니다.
awk -v N=3 'BEGIN {FS="" } { for(i=1;i<=N;i++) a[i]=a[i]$i} END { for(i=1;i<=N;i++) {printf "%s",a[i]};}' input_file >output_file
3
한 줄당 문자 수로 바꾸기
이것은 GNU에서는 잘 작동합니다 awk
. 나머지 변형에 대해서는 잘 모르겠습니다.
답변3
사용행복하다(이전 Perl_6)
~$ raku -e 'my @a = lines.map: *.comb(); put join "", [Z] @a;' file
#OR
~$ raku -e 'my @a = lines.map: *.comb(); put join ",", [Z] @a;' file
첫 번째 코드 예제는 모든 문자를 함께 연결합니다. 두 번째 코드 예제는 쉼표로 연결됩니다. 곧 lines
읽혀지고 각 줄이 comb
단일 문자 요소로 편집될 것입니다. 이는 배열에 저장됩니다 @a
. 파일을 출력하기 위해 put
배열의 각 요소는 [Z]
"zip" 결합/축소되어 모든 첫 번째 요소가 제거되고 결합되고 모든 두 번째 요소가 제거되고 결합됩니다.
입력 예:
ABC
abc
123
출력 예(첫 번째 코드 예):
Aa1Bb2Cc3
또는 호출을 제거하면 join ",",
반환이 단일 공백으로 연결됩니다.
~$ raku -e 'my @a = lines.map: *.comb(); put [Z] @a;' file
A a 1 B b 2 C c 3
https://docs.raku.org/언어/operators#Zip_metaoperator
https://raku.org