是否可以使用简单的 bash 脚本(sed?awk?)按照 File3 给出的指令将 File1 和 File2 的行复制到新的 File4 中。
File1: /*two or more columns, tab delimited*/
AC 456324
DC 689712
GH 123677
KL 236587
File2: /*two or more columns, tab delimited*/
DC AABBC TTYJU
AC DDDEE YYUKI
KL GGHHG QQSSD
File3: /*one column*/
AC
DC
File4 /*tab delimited*/
AC 456324 DDDEE YYUKI
DC 689712 AABBC TTYJU
我实际上是使用 Python 字典执行此操作,我想知道您是否知道一个简单的解决方法。
注意:这个问题以其最简单的形式已经有答案:按行合并文件
答案1
这是您链接到的更简单情况的扩展,使用数组awk
$ awk 'BEGIN{OFS="\t"} NR==FNR {a[$1]=$1;next;} \
$1 in a {k=$1;$1="";a[k]=a[k]$0} END{for (i in a) print a[i]}' File3 File1 File2
AC 456324 DDDEE YYUKI
DC 689712 AABBC TTYJU
与 不同的是join
,它不需要对关键字段上的文件进行预排序。
答案2
您可以使用命令公平地完成它join
。
$ join -j 1 <(sort file3) <(sort file1) > tmp ; \
join -j 1 <(sort tmp) <(sort file2) | sed 's/ /\t/g' > file4
- 我首先
join
使用文件3和文件1自从文件3有钥匙。 - 现在,我将上述命令的输出写入tmp现在再次加入tmp和 文件2。
- 现在,根据上述命令,输出将以空格分隔的格式显示。
- 由于您的要求是制表符分隔格式,因此我将其提供给
sed
命令,该命令用制表符替换所有空格。 - 最后我写给文件4根据您的要求。