我有一个要修改的文件。有 100 个文件存在相同问题。输入文件如下
sample1 100A total 1 1000
sample2 100A total 1 5584
sample3 100A total 1 8125
sample4 100A total 1 59
sample1 . year 1 1000
sample1 . week1 20 1001
sample1 . week2 50 1001
sample2 . year 1 5584
sample2 . week1 20 5585
sample2 . week2 100 5585
sample3 . year 1 8125
sample3 . week1 55 8126
sample3 . week2 100 8126
sample4 . year 1 59
sample4 . week1 10 59
sample4 . week2 8 59
在上面的文件中,第三列中的“总计”是查找表,其最大值不应超过下面各个样本的任何行。
例如,“sample1”的最大值为 1000,但第三列中的“week1”和“week2”的最大值为“1001”。我发现这种情况仅发生在“week1 和 week2”的几行中,并且始终只比最大值大 1。 “week1”和“week2”行的输出应更新为最大值“1000”。下面的示例输出
sample1 100A total 1 1000
sample2 100A total 1 5584
sample3 100A total 1 8125
sample4 100A total 1 59
sample1 . year 1 1000
sample1 . week1 20 1000
sample1 . week2 50 1000
sample2 . year 1 5584
sample2 . week1 20 5584
sample2 . week2 100 5584
sample3 . year 1 8125
sample3 . week1 55 8125
sample3 . week2 100 8125
sample4 . year 1 59
sample4 . week1 10 59
sample4 . week2 8 59
请为我提供指导,告诉我应该如何进行。我是一名初学者程序员,希望学习。谢谢你的帮助
这适用于您的用例吗?
awk '/total/ {a[$1] = $5; print} !/total/ {print $1, $2, $3, $4, ($5 > a[$1] ? a[$1] : $5)}' input_file.txt
例如
cat input_file.txt
sample1 100A total 1 1000
sample2 100A total 1 5584
sample3 100A total 1 8125
sample4 100A total 1 59
sample1 . year 1 1000
sample1 . week1 20 1001
sample1 . week2 50 1001
sample2 . year 1 5584
sample2 . week1 20 5585
sample2 . week2 100 5585
sample3 . year 1 8125
sample3 . week1 55 8126
sample3 . week2 100 8126
sample4 . year 1 59
sample4 . week1 10 59
sample4 . week2 8 59
awk '/total/ {a[$1] = $5; print} !/total/ {print $1, $2, $3, $4, ($5 > a[$1] ? a[$1] : $5)}' input_file.txt
sample1 100A total 1 1000
sample2 100A total 1 5584
sample3 100A total 1 8125
sample4 100A total 1 59
sample1 . year 1 1000
sample1 . week1 20 1000
sample1 . week2 50 1000
sample2 . year 1 5584
sample2 . week1 20 5584
sample2 . week2 100 5584
sample3 . year 1 8125
sample3 . week1 55 8125
sample3 . week2 100 8125
sample4 . year 1 59
sample4 . week1 10 59
sample4 . week2 8 59