Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于公共列追加两个文件_Bash_Shell - Fatal编程技术网

Bash 基于公共列追加两个文件

Bash 基于公共列追加两个文件,bash,shell,Bash,Shell,我知道这个问题可能会重复,但我不知道我到底在寻找什么。所以,这是我的需要。我想在两个文件之间匹配第1列,并将file2.txt的第4列附加到file1.txt。如果列不匹配,我想将“0”作为最后一个字段附加到file1.txt 我有两个文件从NSE网站直接采取 file1.txt的数据如下所示: 20MICRONS,20170207,41.4,41.75,40.75,40.95,74624 3IINFOTECH,20170207,5.5,5.65,5.5,5.6,2679590 3MINDIA,

我知道这个问题可能会重复,但我不知道我到底在寻找什么。所以,这是我的需要。我想在两个文件之间匹配第1列,并将file2.txt的第4列附加到file1.txt。如果列不匹配,我想将“0”作为最后一个字段附加到file1.txt

我有两个文件从NSE网站直接采取

file1.txt的数据如下所示:

20MICRONS,20170207,41.4,41.75,40.75,40.95,74624
3IINFOTECH,20170207,5.5,5.65,5.5,5.6,2679590
3MINDIA,20170207,11865.7,11919.95,11632.05,11892.25,425
20MICRONS,EQ,57597,77.18
3IINFOTECH,EQ,1795693,67.01
等等。这是我的主文件,因此应该保留file1.txt中的所有行

file2.txt的数据如下所示:

20MICRONS,20170207,41.4,41.75,40.75,40.95,74624
3IINFOTECH,20170207,5.5,5.65,5.5,5.6,2679590
3MINDIA,20170207,11865.7,11919.95,11632.05,11892.25,425
20MICRONS,EQ,57597,77.18
3IINFOTECH,EQ,1795693,67.01
等等

请注意,两个文件可能不包含相同数量的行

我的输出文件可能如下所示:

20MICRONS,20170207,41.4,41.75,40.75,40.95,74624,77.18
3IINFOTECH,20170207,5.5,5.65,5.5,5.6,2679590,67.01
3MINDIA,20170207,11865.7,11919.95,11632.05,11892.25,425,0
我试过这个

awk -F, 'NR==FNR{a[$1]=$0; next} {print a[$1]","$4}' file1.txt file2.txt

但是不能将file1.txt的整行作为输出。

类似的方法应该可以工作(假设第1列中的条目在两个文件中只出现一次):

读行时
;
做
col1=$(echo$行| awk-F,{print$1}');
col4=$(grep$col1 file2.txt | awk-F,{print$4}');
echo$行,${col4:=0};
完成
您可以使用
加入

join -a 1 -e 0 -t ',' -j 1 -o '1.1 1.2 1.3 1.4 1.5 1.6 1.7 2.4' file1 file2
如果文件没有按照开始的顺序进行排序,则必须按照以下方式进行排序:

join -a1 -e0 -t, -j1 -o '1.1 1.2 1.3 1.4 1.5 1.6 1.7 2.4' \
    <(sort -k1 -t, file1) \
    <(sort -k1 -t, file2)
连接-a1-e0-t,-j1-o'1.1.2 1.3 1.4 1.5 1.6 1.7 2.4'\

嗨,内哈尔,你的剧本很好用。但是它花费了太长的时间,因为我的文件中大约有1700个条目。对更好的脚本版本有什么建议吗?