gpt4 book ai didi

string - AWK:打印列变量,每个字符用空格分隔

转载 作者:行者123 更新时间:2023-12-01 23:00:20 34 4
gpt4 key购买 nike

我有一个非常大的文件,如下所示:

ID      Class     Values
126 1 332222330442022...
753 1 332222330442022...
119 1 402224220402022...
830 1 002233440232022...
944 1 222222220002022...

第 3 列是一个包含 50,000 个字符的字符串。我需要忽略顶行,删除第 2 列,将第 3 列中的所有 3 或 4 替换为 1,最后打印第 3 列,每个字符用空格分隔。

所以期望的输出是:

126    1 1 2 2 2 2 1 1 0 1 1 2 0 2 2...
753 1 1 2 2 2 2 1 1 0 1 1 2 0 2 2...
119 1 0 2 2 2 1 2 2 0 1 0 2 0 2 2...
830 0 0 2 2 1 1 1 1 0 2 1 2 0 2 2...
944 2 2 2 2 2 2 2 2 0 0 0 2 0 2 2...

由于文件太大,如果可能,最好避免在第 3 列使用拆分。

到目前为止,除了打印由空格分隔的第 3 列外,我可以实现所有功能:

awk -F " " 'NR!= 1 { gsub(3,1,$3); gsub(4,1,$3); printf "%s\t%s\n", $1, $3 }' ./input.txt

我知道我可以使用类似于此处答案 (Split tab delimited column with space) 的 split(),但我还需要打印 $1。是否可以在同一个 awk 命令中分隔第 3 列?

最佳答案

你可以使用这个awk:

awk -v OFS='\t' 'NR > 1 {
gsub(/[34]/, 1, $3)
gsub(/./, "& ", $3)
sub(/ $/, "", $3)
print $1, $3
}' file

126 1 1 2 2 2 2 1 1 0 1 1 2 0 2 2
753 1 1 2 2 2 2 1 1 0 1 1 2 0 2 2
119 1 0 2 2 2 1 2 2 0 1 0 2 0 2 2
830 0 0 2 2 1 1 1 1 0 2 1 2 0 2 2
944 2 2 2 2 2 2 2 2 0 0 0 2 0 2 2

关于string - AWK:打印列变量,每个字符用空格分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72001173/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com