![如何将多列从文件转换为单个字符串](https://linux22.com/image/221154/%E5%A6%82%E4%BD%95%E5%B0%86%E5%A4%9A%E5%88%97%E4%BB%8E%E6%96%87%E4%BB%B6%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%8D%95%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我想编辑这样的东西;
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