【发布时间】:2017-09-25 09:14:13
【问题描述】:
我有一个类似的 TAB 文件
342455 94387 94387 YY1AP1
YY1AP1
141675 141675 LAMTOR2
141675 141675 141675 LAMTOR2
NRDC
352178 352178 NRDC
NRDC
352178 352178 NRDC
352178 352178 NRDC
NRDC
311380 MPC2
311380 MPC2
MPC2
我想根据第四列用第三列的数字填写每一行的第一列。此外,那些为空的行也应填充与第四列对应的相同数字。所以,期望的输出应该是:
342455 94387 94387 YY1AP1
342455 YY1AP1
141675 141675 141675 LAMTOR2
141675 141675 141675 LAMTOR2
352178 NRDC
352178 352178 352178 NRDC
352178 NRDC
352178 352178 352178 NRDC
352178 352178 352178 NRDC
352178 NRDC
311380 311380 MPC2
311380 311380 MPC2
311380 MPC2
以这种方式我尝试过这样做:
awk 'BEGIN { FS=OFS="\t" } {if ($1 == "") { $1 = $3 } else if ($1 ~/^[0-9]/){ $1 = $1 }} print}' "input.tsv" > "output.tsv";
不过,只有在第三列有数字时才填写第一列。我想创建一个哈希以关联第三列和第四列,然后将其关联到第一列并获得所需的输出,但是,有没有可能以更简单的方式做到这一点?提前致谢。
好的。通过您的脚本@RavinderSingh13 获得的输出类似于:
342455 94387 94387 YY1AP1
YY1AP1 YY1AP1
141675 141675 141675 LAMTOR2
141675 141675 141675 LAMTOR2
NRDC NRDC
352178 352178 352178 NRDC
NRDC NRDC
352178 352178 352178 NRDC
352178 352178 352178 NRDC
NRDC NRDC
311380 311380 MPC2
311380 311380 MPC2
MCP2 MPC2
执行我想要的相同功能,但在第一列而不是第三列打印第四列
【问题讨论】:
-
能否请您告诉我们为什么列填充不一致?此外,至少对我来说还不清楚应该提交哪些字段,您提到了字段 1,但我可以看到很多都被填满了,请让我们知道逻辑,以便我们为您提供帮助。
-
好的。所以我只想在第一列写第三列的数字,第三列中的每个数字都与第四列中的一个字符串相关联。这样,当第三列为空时,我想在第一列中写入与第四列相关联的数字,因为在所有情况下,第四列中的字符串至少与一行中第三列中的数字相关联。如果第三列中有数字,我的脚本只会写第一列
-
为什么在第 5 行填充所有列,而不是在 NRDC 所在的第 7 行?
-
第一行让我很尴尬:
342455 94387 94387 YY1AP1。为什么第一列和第三列不同?此外,所需输出中的第二行在第一列中也有342455数字,根据您的逻辑,它应该有94387,因为94387数字与第四列中的YY1AP1字符串相关联列。 -
所以事实上第一行第二列和第三列是不同的。不过是对的。对于某些行,第 3 列与第 1 列不同。在这种情况下,优先级为第 1 列。概括起来就是三种情况。如果第一列有数字,则保持不变。如果第一列是空的并且第三列有一个数字,则在第一列打印这个数字。如果第 1、第 2 和第 3 列为空,则在第 1 列根据其他行 @MiniMax 中的第 4 列打印相同的数字。检查文件后我已经验证是正确的