为初学者提问道歉。我似乎无法弄清楚这一点,我一直在寻找/黑客。以下是我的意见:
0000000000 AAAAA~~~000000000284~~~~~~~~~~ 123456793 2017/05/01
0000000001 BBBBBBBB000000000275~~~~~~~~~~ 123456789 2017/05/01
0000000002 CCCCCCCC0000~~~00276~~~~~~~~~~ 123456789 2017/05/01
我只是想把波浪号转换成插入符号。这是我的问题:
awk -v OFS='\t' '{ print $1, gsub(/~/,"^",$2), $3, $4 }' <${file1} >${file2}
输出如下:
0000000000 13 123456793 2017/05/01
0000000001 10 123456789 2017/05/01
0000000002 13 123456789 2017/05/01
几个问题:
1.我做错了什么?
2. 13和10值的含义是什么?
3.如果我更改为/~+/
,则13和10更改为2和1,所以希望回答#2也会回答这个问题?
4.我看到一个awk示例,其中附加了1,因此:, $4 }1'
,这给出了50%的正确结果:
0000000000 13 123456793 2017/05/01
0000000000 AAAAA^^^000000000284^^^^^^^^^^ 123456793 2017/05/01
0000000001 10 123456789 2017/05/01
0000000001 BBBBBBBB000000000275^^^^^^^^^^ 123456789 2017/05/01
0000000002 13 123456789 2017/05/01
0000000002 CCCCCCCC0000^^^00276^^^^^^^^^^ 123456789 2017/05/01
1
是什么意思/做什么?
提前谢谢你
干杯
答案 0 :(得分:3)
你快到了:
- 我做错了什么?
醇>
您认为gsub函数返回字符串。但是,gsub
函数会更改$2
,但不会打印它。
引用https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html:
gsub()函数返回所做的替换次数。
这也回答了问题2和3。
- 这意味着什么/做什么?
醇>
1是打印的快捷方式。
你所做的是印刷和替代的混合。您只需更改顺序:执行替换然后打印
awk -v OFS='\t' '{ gsub(/~/,"^",$2); print }' <f
或更短:
awk -v OFS='\t' '{ gsub(/~/,"^",$2)}1' <f