Linux 使用其他变量中的信息替换名称

Linux 使用其他变量中的信息替换名称,linux,bash,Linux,Bash,我有一个文件,第一列包含一个对象列表,其他三列包含三个不同但相关的变量。 文件如下所示: file.txt: aaaa_111______ GCP 1 yes bbbb_23e______ DFR 1 no cccc_345______ TRE 4 no dddd_65e______ WER 2 yes eeee_456______ YTR 1 no ffff_222______ HYT 4 yes gggg_345______ UIY 2 no aaaa_111______ GCP bb

我有一个文件,第一列包含一个对象列表,其他三列包含三个不同但相关的变量。 文件如下所示:

file.txt:

aaaa_111______ GCP 1 yes
bbbb_23e______ DFR 1 no
cccc_345______ TRE 4 no
dddd_65e______ WER 2 yes
eeee_456______ YTR 1 no
ffff_222______ HYT 4 yes
gggg_345______ UIY 2 no
aaaa_111______ GCP 
bbbb_23e______ GCP
cccc_345______ HYT
dddd_65e______ WER 
eeee_456______ GCP
ffff_222______ HYT 
gggg_345______ WER
我需要获得一个新的文件,其中我更改了第二列(配体的名称),包括第三列和第四列。对于两个对象,如果第三列中的数字相同,我想用第四列中的“是”替换第二列中的名称

最终文件应如下所示:

file.txt:

aaaa_111______ GCP 1 yes
bbbb_23e______ DFR 1 no
cccc_345______ TRE 4 no
dddd_65e______ WER 2 yes
eeee_456______ YTR 1 no
ffff_222______ HYT 4 yes
gggg_345______ UIY 2 no
aaaa_111______ GCP 
bbbb_23e______ GCP
cccc_345______ HYT
dddd_65e______ WER 
eeee_456______ GCP
ffff_222______ HYT 
gggg_345______ WER
我将第四列中写为“否”的配体名称(第二列)替换为第三列中编号相同,第四列中写为“是”的配体名称。 我希望我已经说清楚了,但我确实意识到这个问题很复杂,可以用语言来解释。有人能建议怎么做吗?谢谢你

救援

把文件读两遍。在第一次阅读时,记住哪些数字应该替换为什么。在第二次读取中,根据第一次读取中创建的表替换值

#/usr/bin/perl
使用警告;
严格使用;
使用特征qw{say};
打开我的美元,'

使用awk,处理文件两次。在第一个过程(NR==FNR)中,当空格分隔的第四个字段为yes时,创建一个数组。索引是第三个分隔符,值是第二个分隔符。然后在第二遍(NR!=FNR)中,当第四个字段为否时,用第二个字段替换映射数组中的值,并打印必要的数据。否则,只需打印必要的数据。

谢谢。现在我尝试,但是我应该在哪里插入原始文件来读取信息?对不起,我不实用。@TommasoPalomba:它应该作为脚本的参数提供
perl此脚本输入文件
script_replace.sh:line 2:use:command not found script_replace.sh:line 3:use:command not found script_replace.sh:line 4:use:command not found不可能的ottenere un descriptore di file che si riferisce alla console script_replace.sh:line 8:my:command not found script_replace.sh:line 9:syntax意外标记附近出现错误
)'script_replace.sh:line 9:
,而(){'I获得了这些标记message@TommasoPalomba这是一个perl脚本,不是shell脚本…它不起作用。它给出了与原始文件相同的结果,但没有第3列和第4列,但名称不是replaceOK。您正在运行哪个版本的awk?(awk-V)此外,字段分隔符是否与示例中的字段分隔符实际相同?版本为:GNU Awk 4.0.2,列之间的分隔符与我的版本相同,因此应该可以工作。此解决方案只是输出到屏幕,而不是写入文件。