gpt4 book ai didi

linux - 通过公共(public)列标题加入 2 个文件(没有 awk/sed)

转载 作者:太空狗 更新时间:2023-10-29 12:03:24 27 4
gpt4 key购买 nike

基本上我想从 file2 中获取所有记录,但过滤掉标题未出现在 file1 中的列

示例:

文件1

Name Location

文件2

Name Phone_Number Location Email
Jim 032131 xyz xyz@qqq.com
Tim 037903 zzz zzz@qqq.com
Pimp 039141 xxz xxz@qqq.com

输出

Name Location
Jim xyz
Tim zzz
Pimp xxz

有没有办法不用 awksed,但仍然使用 coreutils 工具?我试过使用 join 来完成它,但无法让它工作。

最佳答案

ALL_COLUMNS=$(head -n1 file2)
for COLUMN in $(head -n1 file1); do
JOIN_FORMAT+="2.$(( $(echo ${ALL_COLUMNS%%$COLUMN*} | wc -w)+1 )),"
done
join -a2 -o ${JOIN_FORMAT%?} /dev/null file2

说明:

ALL_COLUMNS=$(head -n1 file2)

它保存了所有的列名以供下一步过滤


for COLUMN in $(head -n1 file1); do
JOIN_FORMAT+="2.$(( $(echo ${ALL_COLUMNS%%$COLUMN*} | wc -w)+1 )),"
done

对于 file1 中的每一列, 我们在 file2 中寻找同名的位置并将其附加到 JOIN_FORMAT"2.<number_of_column>,"的路上


join -a2 -o ${JOIN_FORMAT%?} /dev/null file2

一旦我们有完整的选项字符串(2.1,2.3,),我们将它传递给join删除最后一个 , .

join打印提供的第二个文件 ( -a2 -> file2 ) 中无法配对的行,但仅打印 -o 中指定的列选项。

关于linux - 通过公共(public)列标题加入 2 个文件(没有 awk/sed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com