如何用值0替换第2列中的最后一个字符
输入
1232;1001;1
2231;2007;1
2234;2009;2
2003;1114;1
输出所需
1232;1000;1
2231;2000;1
2234;2000;2
2003;1110;1
答案 0 :(得分:1)
gensub()
您可以使用任意数量的GNU awk string functions来执行此操作,但gensub()命令特别有用。它有签名:
gensub(regexp,replacement,how [,target])
这使得它对这些变换非常灵活。
# Store your input in a shell variable for MCVE convenience, although
# you can have this data in a file or pass it on standard input if you
# prefer.
example_input='1232;1001;1
2231;2007;1
2234;2009;2
2003;1114;1'
# Use awk's gensub() string function.
echo "$example_input" | awk '{print gensub(/.;/, "0;", 2, $1)}'
这导致以下输出:
1232;1000;1 2231;2000;1 2234;2000;2 2003;1110;1
答案 1 :(得分:0)
我会用sed
:
sed -e 's/^\([^;]*;[^;]*\).;/\10;/' filename
答案 2 :(得分:0)
awk
方法:
awk -F';' '{ sub(/.$/,0,$2) }1' OFS=';' file
输出:
1232;1000;1
2231;2000;1
2234;2000;2
2003;1110;1
或与substr()
函数相同:
awk -F';' '{ $2=substr($2,0,3)0 }1' OFS=';' file
答案 3 :(得分:0)
不一定更好,但数学数据的数学方法......
$ awk 'BEGIN{FS=OFS=";"} {$2=int($2/10)*10}1'
向下舍入最后的数字(1),向下舍入两位数(1和10),用10
替换100
。
或者,使用GNU sed
$ sed 's/.;/0;/2'