在Bash中连接

在Bash中连接,bash,join,awk,Bash,Join,Awk,我几乎到处寻找我的问题的答案,所以我希望有人能在这里指导我 我有一个包含以下信息的csv文件: Location NumA1 NumA2 NumB1 NumB2 Area 1 1321 140 1321 1530 Area 2 1321 140 1321 1540 Area 3 1321 140 1321 1644 Area 4 1321 140 1321 1645 Area 5 1321 140 1321

我几乎到处寻找我的问题的答案,所以我希望有人能在这里指导我

我有一个包含以下信息的csv文件:

Location    NumA1   NumA2   NumB1   NumB2
Area 1  1321    140 1321    1530
Area 2  1321    140 1321    1540
Area 3  1321    140 1321    1644
Area 4  1321    140 1321    1645
Area 5  1321    140 1321    2140
Area 6  1321    141 1321    142
Area 7  1321    141 1321    143
Area 8  1321    141 1323    181
Area 9  1321    141 1323    182
Area 10 1321    141 1323    183
Area 11 1321    141 1333    401
Area 12 1321    141 1323    902
我希望得到的结果如下:

Location    NumA1   NumA2   NumB1   NumB2   A Cell  B Cell  A to B  B to A
Area 1  1321    140 1321    1530    1321_140    1321_1530   1321_140_1321_1530  1321_1530_1321_140
Area 2  1321    140 1321    1540    1321_140    1321_1540   1321_140_1321_1540  1321_1540_1321_140
Area 3  1321    140 1321    1644    1321_140    1321_1644   1321_140_1321_1644  1321_1644_1321_140
Area 4  1321    140 1321    1645    1321_140    1321_1645   1321_140_1321_1645  1321_1645_1321_140
Area 5  1321    140 1321    2140    1321_140    1321_2140   1321_140_1321_2140  1321_2140_1321_140
Area 6  1321    141 1321    142 1321_141    1321_142    1321_141_1321_142   1321_142_1321_141
Area 7  1321    141 1321    143 1321_141    1321_143    1321_141_1321_143   1321_143_1321_141
Area 8  1321    141 1323    181 1321_141    1323_181    1321_141_1323_181   1323_181_1321_141
Area 9  1321    141 1323    182 1321_141    1323_182    1321_141_1323_182   1323_182_1321_141
Area 10 1321    141 1323    183 1321_141    1323_183    1321_141_1323_183   1323_183_1321_141
Area 11 1321    141 1333    401 1321_141    1333_401    1321_141_1333_401   1333_401_1321_141
Area 12 1321    141 1323    902 1321_141    1323_902    1321_141_1323_902   1323_902_1321_141
这与Excel中的连接相同,不过由于文件有200000多行,Excel处理更改的速度会变慢

$ awk '{ print $1,$2,$3,$4,$5,$6,$3"_"$4,$5"_"$6,$3"_"$4"_"$5"_"$6,$5"_"$6"_"$3"_"$4 }' 1.txt 
Area 1 1321 140 1321 1530 1321_140 1321_1530 1321_140_1321_1530 1321_1530_1321_140
Area 2 1321 140 1321 1540 1321_140 1321_1540 1321_140_1321_1540 1321_1540_1321_140
Area 3 1321 140 1321 1644 1321_140 1321_1644 1321_140_1321_1644 1321_1644_1321_140
Area 4 1321 140 1321 1645 1321_140 1321_1645 1321_140_1321_1645 1321_1645_1321_140
Area 5 1321 140 1321 2140 1321_140 1321_2140 1321_140_1321_2140 1321_2140_1321_140
Area 6 1321 141 1321 142 1321_141 1321_142 1321_141_1321_142 1321_142_1321_141
Area 7 1321 141 1321 143 1321_141 1321_143 1321_141_1321_143 1321_143_1321_141
Area 8 1321 141 1323 181 1321_141 1323_181 1321_141_1323_181 1323_181_1321_141
Area 9 1321 141 1323 182 1321_141 1323_182 1321_141_1323_182 1323_182_1321_141
Area 10 1321 141 1323 183 1321_141 1323_183 1321_141_1323_183 1323_183_1321_141
Area 11 1321 141 1333 401 1321_141 1333_401 1321_141_1333_401 1333_401_1321_141
Area 12 1321 141 1323 902 1321_141 1323_902 1321_141_1323_902 1323_902_1321_141
如果需要选项卡式空间,可以通过以下方式使用awk:

$ awk '{ print $1,$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$3"_"$4"\t"$5"_"$6"\t"$3"_"$4"_"$5"_"$6"\t"$5"_"$6"_"$3"_"$4 }' 1.txt 
Area 1  1321    140 1321    1530    1321_140    1321_1530   1321_140_1321_1530  1321_1530_1321_140
Area 2  1321    140 1321    1540    1321_140    1321_1540   1321_140_1321_1540  1321_1540_1321_140
Area 3  1321    140 1321    1644    1321_140    1321_1644   1321_140_1321_1644  1321_1644_1321_140
Area 4  1321    140 1321    1645    1321_140    1321_1645   1321_140_1321_1645  1321_1645_1321_140
Area 5  1321    140 1321    2140    1321_140    1321_2140   1321_140_1321_2140  1321_2140_1321_140
Area 6  1321    141 1321    142 1321_141    1321_142    1321_141_1321_142   1321_142_1321_141
Area 7  1321    141 1321    143 1321_141    1321_143    1321_141_1321_143   1321_143_1321_141
Area 8  1321    141 1323    181 1321_141    1323_181    1321_141_1323_181   1323_181_1321_141
Area 9  1321    141 1323    182 1321_141    1323_182    1321_141_1323_182   1323_182_1321_141
Area 10 1321    141 1323    183 1321_141    1323_183    1321_141_1323_183   1323_183_1321_141
Area 11 1321    141 1333    401 1321_141    1333_401    1321_141_1333_401   1333_401_1321_141
Area 12 1321    141 1323    902 1321_141    1323_902    1321_141_1323_902   1323_902_1321_141
如果还想打印标题,请参阅此链接:


已测试

如果您想自己提供标题行:

$ awk 'NR>1{a=$3"_"$4;b=$5"_"$6;print $0,a,b,a"_"b,b"_"a}' file
Area 1  1321    140 1321    1530 1321_140 1321_1530 1321_140_1321_1530 1321_1530_1321_140
Area 2  1321    140 1321    1540 1321_140 1321_1540 1321_140_1321_1540 1321_1540_1321_140
Area 3  1321    140 1321    1644 1321_140 1321_1644 1321_140_1321_1644 1321_1644_1321_140
Area 4  1321    140 1321    1645 1321_140 1321_1645 1321_140_1321_1645 1321_1645_1321_140
Area 5  1321    140 1321    2140 1321_140 1321_2140 1321_140_1321_2140 1321_2140_1321_140
Area 6  1321    141 1321    142 1321_141 1321_142 1321_141_1321_142 1321_142_1321_141
Area 7  1321    141 1321    143 1321_141 1321_143 1321_141_1321_143 1321_143_1321_141
Area 8  1321    141 1323    181 1321_141 1323_181 1321_141_1323_181 1323_181_1321_141
Area 9  1321    141 1323    182 1321_141 1323_182 1321_141_1323_182 1323_182_1321_141
Area 10 1321    141 1323    183 1321_141 1323_183 1321_141_1323_183 1323_183_1321_141
Area 11 1321    141 1333    401 1321_141 1333_401 1321_141_1333_401 1333_401_1321_141
Area 12 1321    141 1323    902 1321_141 1323_902 1321_141_1323_902 1323_902_1321_141
或者,如果您希望它像其他字段一样生成:

$ awk '{s=(NR==1?2:3); a=$s"_"$++s;b=$++s"_"$++s;print $0,a,b,a"_"b,b"_"a}' file
Location    NumA1   NumA2   NumB1   NumB2 NumA1_NumA2 NumB1_NumB2 NumA1_NumA2_NumB1_NumB2 NumB1_NumB2_NumA1_NumA2
Area 1  1321    140 1321    1530 1321_140 1321_1530 1321_140_1321_1530 1321_1530_1321_140
Area 2  1321    140 1321    1540 1321_140 1321_1540 1321_140_1321_1540 1321_1540_1321_140
Area 3  1321    140 1321    1644 1321_140 1321_1644 1321_140_1321_1644 1321_1644_1321_140
Area 4  1321    140 1321    1645 1321_140 1321_1645 1321_140_1321_1645 1321_1645_1321_140
Area 5  1321    140 1321    2140 1321_140 1321_2140 1321_140_1321_2140 1321_2140_1321_140
Area 6  1321    141 1321    142 1321_141 1321_142 1321_141_1321_142 1321_142_1321_141
Area 7  1321    141 1321    143 1321_141 1321_143 1321_141_1321_143 1321_143_1321_141
Area 8  1321    141 1323    181 1321_141 1323_181 1321_141_1323_181 1323_181_1321_141
Area 9  1321    141 1323    182 1321_141 1323_182 1321_141_1323_182 1323_182_1321_141
Area 10 1321    141 1323    183 1321_141 1323_183 1321_141_1323_183 1323_183_1321_141
Area 11 1321    141 1333    401 1321_141 1333_401 1321_141_1333_401 1333_401_1321_141
Area 12 1321    141 1323    902 1321_141 1323_902 1321_141_1323_902 1323_902_1321_141

我劝你不要这样做。您的数据文件可能要大得多,但它不包含任何附加信息。
$ awk '{s=(NR==1?2:3); a=$s"_"$++s;b=$++s"_"$++s;print $0,a,b,a"_"b,b"_"a}' file
Location    NumA1   NumA2   NumB1   NumB2 NumA1_NumA2 NumB1_NumB2 NumA1_NumA2_NumB1_NumB2 NumB1_NumB2_NumA1_NumA2
Area 1  1321    140 1321    1530 1321_140 1321_1530 1321_140_1321_1530 1321_1530_1321_140
Area 2  1321    140 1321    1540 1321_140 1321_1540 1321_140_1321_1540 1321_1540_1321_140
Area 3  1321    140 1321    1644 1321_140 1321_1644 1321_140_1321_1644 1321_1644_1321_140
Area 4  1321    140 1321    1645 1321_140 1321_1645 1321_140_1321_1645 1321_1645_1321_140
Area 5  1321    140 1321    2140 1321_140 1321_2140 1321_140_1321_2140 1321_2140_1321_140
Area 6  1321    141 1321    142 1321_141 1321_142 1321_141_1321_142 1321_142_1321_141
Area 7  1321    141 1321    143 1321_141 1321_143 1321_141_1321_143 1321_143_1321_141
Area 8  1321    141 1323    181 1321_141 1323_181 1321_141_1323_181 1323_181_1321_141
Area 9  1321    141 1323    182 1321_141 1323_182 1321_141_1323_182 1323_182_1321_141
Area 10 1321    141 1323    183 1321_141 1323_183 1321_141_1323_183 1323_183_1321_141
Area 11 1321    141 1333    401 1321_141 1333_401 1321_141_1333_401 1333_401_1321_141
Area 12 1321    141 1323    902 1321_141 1323_902 1321_141_1323_902 1323_902_1321_141