在Bash中连接
我几乎到处寻找我的问题的答案,所以我希望有人能在这里指导我 我有一个包含以下信息的csv文件:在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
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