P.t*_*tin 0 sed awk text-processing
我有一个制表符分隔的表格
a b c
A 5 2 0
B 0 5 4
C 4 3 4
D 2 0 2
Run Code Online (Sandbox Code Playgroud)
我想将非零值更改为“1”,而不更改列名或行名。
期望的输出:
a b c
A 1 1 0
B 0 1 1
C 1 1 1
D 1 0 1
Run Code Online (Sandbox Code Playgroud)
为了澄清,这是一个示例表。字母是代表列/行名称的变量 - 可能有数百个列和行。非零值(此处以数字形式给出)可能不一定是数字——例如,它们可能是人名。
假设严格以制表符分隔的输入:
$ cat data.in
a b c
A nancy bilbo baggins 0
B 0 darcy bender
C phantom menace Unix !!
D last row 0 the end
$ cat -t data.in
^Ia^Ib^Ic
A^Inancy^Ibilbo baggins^I0
B^I0^Idarcy^Ibender
C^Iphantom menace^IUnix^I!!
D^Ilast row^I0^Ithe end
Run Code Online (Sandbox Code Playgroud)
一个awk脚本来完成这项工作:
BEGIN { OFS = FS = "\t" }
NR != 1 {
for (i = 2; i <= NF; ++i) {
if ($i != "0") {
$i = "1";
}
}
}
{ print }
Run Code Online (Sandbox Code Playgroud)
运行它:
$ awk -f script.awk data.in
a b c
A 1 1 0
B 0 1 1
C 1 1 1
D 1 0 1
Run Code Online (Sandbox Code Playgroud)
该脚本每个字段(列)与单个字符相比较0(除了第一场),并取代一切,这是不完全0用1。输出将以制表符分隔。