用值 0 替换特定列中的最后一个字符
Replace last character in specific column with value 0
如何用值 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
我会用 sed
:
sed -e 's/^\([^;]*;[^;]*\).;/;/' filename
awk
方法:
awk -F';' '{ sub(/.$/,0,) }1' OFS=';' file
输出:
1232;1000;1
2231;2000;1
2234;2000;2
2003;1110;1
或与substr()
函数相同:
awk -F';' '{ =substr(,0,3)0 }1' OFS=';' file
使用 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, )}'
这导致以下输出:
1232;1000;1
2231;2000;1
2234;2000;2
2003;1110;1
不一定更好,但是数值数据的数学方法...
$ awk 'BEGIN{FS=OFS=";"} {=int(/10)*10}1'
向下舍入最后一位数,向下舍入两位数(个位和十位)将 10
替换为 100
。
或者,使用 GNU 进行简单替换会更容易 sed
$ sed 's/.;/0;/2'
如何用值 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
我会用 sed
:
sed -e 's/^\([^;]*;[^;]*\).;/;/' filename
awk
方法:
awk -F';' '{ sub(/.$/,0,) }1' OFS=';' file
输出:
1232;1000;1
2231;2000;1
2234;2000;2
2003;1110;1
或与substr()
函数相同:
awk -F';' '{ =substr(,0,3)0 }1' OFS=';' file
使用 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, )}'
这导致以下输出:
1232;1000;1 2231;2000;1 2234;2000;2 2003;1110;1
不一定更好,但是数值数据的数学方法...
$ awk 'BEGIN{FS=OFS=";"} {=int(/10)*10}1'
向下舍入最后一位数,向下舍入两位数(个位和十位)将 10
替换为 100
。
或者,使用 GNU 进行简单替换会更容易 sed
$ sed 's/.;/0;/2'