複数の列をファイルから単一の文字列に変換する方法

複数の列をファイルから単一の文字列に変換する方法

こんなことを編集したいです。

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

31行あたりの文字数に置き換える

これは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

関連情報