こんなことを編集したいです。
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
1行あたりの文字数に置き換える
これは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
最初のコード例は、すべての文字を一緒に連結します。 2番目のコード例はコンマで連結されています。すぐにlines
読み取られ、各行は comb
単一の文字要素として編集されます。これは配列に保存されます@a
。ファイルを出力するために、put
配列内の各要素は[Z]
「zip」結合/縮小され、すべての最初の要素が削除され、結合され、すべての2番目の要素が削除され、結合されます。
入力例:
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