大家好,我正在处理如下文字:
& & Training & & & & Early birds & & & & & Test & \\\hline
& EN & ES & IT & DU & EN & ES & IT & DU & EN & ES & IT & DU \\\hline
Users & 152 & 110 & 38 & 34& 42 & 30 & 12 & 10 & 142 & 88 & 36 & 32 \\\hline
18-24 & 58 & 22 & & & 16 & 6 & & & 56 & 18 & & \\
25-34 & 60 & 56 & & &16 & 14 & & & 58 & 44 & &\\
35-49 & 22 & 22 & & & 6& 6 & & & 20 & 18 & &\\
50+ & 12 & 10 & & & 4& 4 & & & 8 &8 & & \\\hline
我正在使用&作为列分隔符的符号,我想使用awk删除text.txt的七列,我试过了:
awk -F "&" '{print $7}' text.txt
我得到了:
Early birds
ES
30
6
14
6
4
这是我要从text.txt中删除的列,我想用awk实现这一点,我想感谢任何建议。
答案 0 :(得分:4)
(([^&]*&){6})
适用于此:
\1
[^&]*&
与前六列匹配,并将其保存在组\1
中。 c3.generate({
bindto: '#unlimited-bar-graph',
data: {
x : 'x',
columns: [
['x', 'Auto', 'M2M'],
['Renew', 20,200,300],
['Return', 10,20,30],
['Sign Up', 12, 10, 10],
],
type: 'bar',
groups: [
['Renew', 'Return', 'Sign Up']
]
},
axis: {
x: {
type: 'category' // this is needed to load string x value
}
},
grid: {
y: {
lines: [{value:0}]
}
}
});
匹配第七个。所有这些都只被前六列{{1}}替换。
答案 1 :(得分:2)
使用GNU awk for gensub():
$ awk '{print gensub(/(([^&]*&){6})[^&]*&/,"\\1",1)}' file
& & Training & & & & & & & & Test & \\\hline
& EN & ES & IT & DU & EN & IT & DU & EN & ES & IT & DU \\\hline
Users & 152 & 110 & 38 & 34& 42 & 12 & 10 & 142 & 88 & 36 & 32 \\\hline
18-24 & 58 & 22 & & & 16 & & & 56 & 18 & & \\
25-34 & 60 & 56 & & &16 & & & 58 & 44 & &\\
35-49 & 22 & 22 & & & 6& & & 20 & 18 & &\\
50+ & 12 & 10 & & & 4& & & 8 &8 & & \\\hline
对于其他问题,还有一些工作要做:
$ awk 'match($0,/([^&]*&){7}/) { tgt=substr($0,1,RLENGTH); sub(/[^&]*&$/,"",tgt); $0=tgt substr($0,RLENGTH+1) } 1' file
& & Training & & & & & & & & Test & \\\hline
& EN & ES & IT & DU & EN & IT & DU & EN & ES & IT & DU \\\hline
Users & 152 & 110 & 38 & 34& 42 & 12 & 10 & 142 & 88 & 36 & 32 \\\hline
18-24 & 58 & 22 & & & 16 & & & 56 & 18 & & \\
25-34 & 60 & 56 & & &16 & & & 58 & 44 & &\\
35-49 & 22 & 22 & & & 6& & & 20 & 18 & &\\
50+ & 12 & 10 & & & 4& & & 8 &8 & & \\\hline
或者因为你有一个字符串FS而不是一个正则表达式:
$ awk 'BEGIN{FS=OFS="&"} { j=0; for (i=1;i<=NF;i++) if (i!=7) printf "%s%s",(++j>1?OFS:""),$i; print "" }' file
& & Training & & & & & & & & Test & \\\hline
& EN & ES & IT & DU & EN & IT & DU & EN & ES & IT & DU \\\hline
Users & 152 & 110 & 38 & 34& 42 & 12 & 10 & 142 & 88 & 36 & 32 \\\hline
18-24 & 58 & 22 & & & 16 & & & 56 & 18 & & \\
25-34 & 60 & 56 & & &16 & & & 58 & 44 & &\\
35-49 & 22 & 22 & & & 6& & & 20 & 18 & &\\
50+ & 12 & 10 & & & 4& & & 8 &8 & & \\\hline