如何将多列从文件转换为单个字符串

如何将多列从文件转换为单个字符串

我想编辑这样的东西;

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/language/operators#Zip_metaoperator
https://raku.org

相关内容