如何在第三个字段中剪切前导零,使其只有6个字符?
xxx,aaa,00000000cc
rrr,ttt,0000000yhh
期望的输出
xxx,aaa,0000cc
rrr,ttt,000yhh
答案 0 :(得分:3)
或者这是使用awk的解决方案
echo " xxx,aaa,00000000cc
rrr,ttt,0000000yhh"|awk -F, -v OFS=, '{sub(/^0000/, "", $3)}1'
<强>输出强>
xxx,aaa,0000cc
rrr,ttt,000yhh
awk使用-F(或FieldSeparator的FS),你必须使用OFS作为OutputFieldSeparator。
sub(/srchtarget/, "replacmentstring", stringToFix)
使用正则表达式在(0
)前面查找4 ^
个第三个字段($ 3)。
1
是print
语句的简写。该脚本的简写版本将是
echo " xxx,aaa,00000000cc
rrr,ttt,0000000yhh"|awk -F, -v OFS=, '{sub(/^0000/, "", $3);print}'
# ---------------------------------------------------------^^^^^^
这一切都与awk的/pattern/{action}
成语有关。
IHTH
答案 1 :(得分:1)
如果你可以假设总有三个字段并且想要剥离第三个字段中的前四个零,你可以使用这样的怪物:
$ cat data
xxx,0000aaa,00000000cc
rrr,0000ttt,0000000yhh
$ cat data |sed 's/\([^,]\+\),\([^,]\+\),0000\([^,]\+\)/\1,\2,\3/
xxx,0000aaa,0000cc
rrr,0000ttt,000yhh
另一种更灵活的解决方案,如果你不介意管道进入Python:
cat data | python -c '
import sys
for line in sys.stdin():
print(",".join([f[4:] if i == 2 else f for i, f in enumerate(line.strip().split(","))]))
'
这表示“删除第三个字段的前四个字符,但保持所有其他字段不变”。
答案 2 :(得分:0)
使用awk
s substr
也应该有效:
awk -F, -v OFS=, '{$3=substr($3,5,6)}1' file
xxx,aaa,0000cc
rrr,ttt,000yhh
只需从字段6
中的5
位置获取3
个字符,然后将其设置回字段3