2013-01-24 54 views
0

我幾乎到處尋找解決方案來解決我的問題,所以我希望有人能在這裏指導我。在Bash中連接

我有以下信息的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串連雖然自文件有超過200,000行Excel將緩慢處理更改。

+1

我勸你不要這樣做的。我們的數據文件要大得多,但它不包含任何附加信息。 – Bernhard

回答

2
$ 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 

如果你想打印也航向,請參考以下鏈接:http://www.techtrunch.com/scripting/awk-formatted-output

0
awk '$6=$6" "$3"_"$4" "$5"_"$6" "$3"_"$4"_"$5"_"$6" "$5"_"$6"_"$3"_"$4' your_file 

測試here

0

如果您想自己提供標題行:

$ 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