在 bash 的特定列中剪切字符串
cut string in a specific column in bash
如何删除第三个字段中的前导零,使其只有 6 个字符?
xxx,aaa,00000000cc
rrr,ttt,0000000yhh
期望的输出
xxx,aaa,0000cc
rrr,ttt,000yhh
如果您可以假设总是有三个字段并且您想要去掉第三个字段中的前四个零,您可以使用这样的怪物:
$ cat data
xxx,0000aaa,00000000cc
rrr,0000ttt,0000000yhh
$ cat data |sed 's/\([^,]\+\),\([^,]\+\),0000\([^,]\+\)/,,/
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(","))]))
'
这表示 "remove the first four characters of the third field but leave all other fields unchanged"。
或者这里有一个使用 awk 的解决方案
echo " xxx,aaa,00000000cc
rrr,ttt,0000000yhh"|awk -F, -v OFS=, '{sub(/^0000/, "", )}1'
输出
xxx,aaa,0000cc
rrr,ttt,000yhh
awk 使用 -F(或 FS 表示 FieldSeparator)并且您必须使用 OFS 表示 OutputFieldSeparator)。
sub(/srchtarget/, "replacmentstring", stringToFix)
是用正则表达式在(^
)第三个字段($3).
前面找4个0
1
是 print
语句的 shorthand。该脚本的普通版本是
echo " xxx,aaa,00000000cc
rrr,ttt,0000000yhh"|awk -F, -v OFS=, '{sub(/^0000/, "", );print}'
# ---------------------------------------------------------^^^^^^
都与awk的/pattern/{action}
习语有关。
IHTH
使用 awk
s substr
也应该有效:
awk -F, -v OFS=, '{=substr(,5,6)}1' file
xxx,aaa,0000cc
rrr,ttt,000yhh
它只是从字段 3
中的 5
位置提取 6
个字符并将其设置回字段 3
如何删除第三个字段中的前导零,使其只有 6 个字符?
xxx,aaa,00000000cc
rrr,ttt,0000000yhh
期望的输出
xxx,aaa,0000cc
rrr,ttt,000yhh
如果您可以假设总是有三个字段并且您想要去掉第三个字段中的前四个零,您可以使用这样的怪物:
$ cat data
xxx,0000aaa,00000000cc
rrr,0000ttt,0000000yhh
$ cat data |sed 's/\([^,]\+\),\([^,]\+\),0000\([^,]\+\)/,,/
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(","))]))
'
这表示 "remove the first four characters of the third field but leave all other fields unchanged"。
或者这里有一个使用 awk 的解决方案
echo " xxx,aaa,00000000cc
rrr,ttt,0000000yhh"|awk -F, -v OFS=, '{sub(/^0000/, "", )}1'
输出
xxx,aaa,0000cc
rrr,ttt,000yhh
awk 使用 -F(或 FS 表示 FieldSeparator)并且您必须使用 OFS 表示 OutputFieldSeparator)。
sub(/srchtarget/, "replacmentstring", stringToFix)
是用正则表达式在(^
)第三个字段($3).
0
1
是 print
语句的 shorthand。该脚本的普通版本是
echo " xxx,aaa,00000000cc
rrr,ttt,0000000yhh"|awk -F, -v OFS=, '{sub(/^0000/, "", );print}'
# ---------------------------------------------------------^^^^^^
都与awk的/pattern/{action}
习语有关。
IHTH
使用 awk
s substr
也应该有效:
awk -F, -v OFS=, '{=substr(,5,6)}1' file
xxx,aaa,0000cc
rrr,ttt,000yhh
它只是从字段 3
中的 5
位置提取 6
个字符并将其设置回字段 3