想阅读第一列,然后用先前的非空列值向下填充空列值。
输入.txt
20 0 ABC 1 N DEFABC 0 CHARGE
1 ABC 1 N GHIABC 0 CHARGE
2 ABC 1 N JKLABC 0 CHARGE
3 ABC 1 N MNOABC 0 CHARGE
4 ABC 1 N PQRABC 0 CHARGE
210&&-2 0 ABC 1 N DEFABC 0 CHARGE
1 ABC 1 N GHIABC 0 CHARGE
2 ABC 1 N JKLABC 0 CHARGE
3 ABC 1 N MNOABC 0 CHARGE
4 ABC 1 N PQRABC 0 CHARGE
2130&&-4&-6&&-9 0 ABC 1 N DEFABC 0 CHARGE
1 ABC 1 N GHIABC 0 CHARGE
2 ABC 1 N JKLABC 0 CHARGE
3 ABC 1 N MNOABC 0 CHARGE
4 ABC 1 N PQRABC 0 CHARGE
尝试了下面的命令脚本,如果文件以“,”分隔符分隔,它工作正常 对于上述示例输入,它不适用于 FS=""和 FS ="\t"。
$ awk -f FillEmpty.awk Input.txt
$ cat FillEmpty.awk
BEGIN { FS = "" }
$1 != "" { print }
$1 == "" {
# fill in blanks
for (i = 1; i <= NR; i++)
if ($i == "")
$i = Saved[i]
print
}
{
# save all fields
for (i = 1; i <= NR; i++)
Saved[i] = $i
}
期望的输出:
20 0 ABC 1 N DEFABC 0 CHARGE
20 1 ABC 1 N GHIABC 0 CHARGE
20 2 ABC 1 N JKLABC 0 CHARGE
20 3 ABC 1 N MNOABC 0 CHARGE
20 4 ABC 1 N PQRABC 0 CHARGE
210&&-2 0 ABC 1 N DEFABC 0 CHARGE
210&&-2 1 ABC 1 N GHIABC 0 CHARGE
210&&-2 2 ABC 1 N JKLABC 0 CHARGE
210&&-2 3 ABC 1 N MNOABC 0 CHARGE
210&&-2 4 ABC 1 N PQRABC 0 CHARGE
2130&&-4&-6&&-9 0 ABC 1 N DEFABC 0 CHARGE
2130&&-4&-6&&-9 1 ABC 1 N GHIABC 0 CHARGE
2130&&-4&-6&&-9 2 ABC 1 N JKLABC 0 CHARGE
2130&&-4&-6&&-9 3 ABC 1 N MNOABC 0 CHARGE
2130&&-4&-6&&-9 4 ABC 1 N PQRABC 0 CHARGE
任何建议...!
最佳答案
保留格式的 Awk 方式
awk '/^ /{$0=(x)substr($0,21)}{x=substr($0,0,20)}1' file
另一种不需要字段长度的方式(非常类似于 tom feneches 的回答)
awk '/^ /{$0=(x)substr($0,length(x)+1)}{x=$1}1' file
两者的输出
20 0 ABC 1 N DEFABC 0 CHARGE
20 1 ABC 1 N GHIABC 0 CHARGE
20 2 ABC 1 N JKLABC 0 CHARGE
20 3 ABC 1 N MNOABC 0 CHARGE
20 4 ABC 1 N PQRABC 0 CHARGE
210&&-2 0 ABC 1 N DEFABC 0 CHARGE
210&&-2 1 ABC 1 N GHIABC 0 CHARGE
210&&-2 2 ABC 1 N JKLABC 0 CHARGE
210&&-2 3 ABC 1 N MNOABC 0 CHARGE
210&&-2 4 ABC 1 N PQRABC 0 CHARGE
2130&&-4&-6&&-9 0 ABC 1 N DEFABC 0 CHARGE
2130&&-4&-6&&-9 1 ABC 1 N GHIABC 0 CHARGE
2130&&-4&-6&&-9 2 ABC 1 N JKLABC 0 CHARGE
2130&&-4&-6&&-9 3 ABC 1 N MNOABC 0 CHARGE
2130&&-4&-6&&-9 4 ABC 1 N PQRABC 0 CHARGE
关于awk 用先前的非空列值 : 填充空列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182580/