如何使用 sed 从最后一列之前删除组数字字符逗号和引号本身?
请注意,在下面的示例中,目标列未包含在双引号中。
0,1,,,"10,815,197",
6,7,010202,,"5,589",
6,7,010202,,589,
预期结果是:
0,1,,,10815197,
6,7,010202,,5589,
6,7,010202,,589,
答案1
Awk
将是最适合您的场景。
$ awk -F'"' '{gsub(",", "", $2);print}' file.txt
0,1,,, 10815197 ,
6,7,010202,, 5589 ,
6,7,010202,,589,
怎么运行的
-F'"'
- 导致AWK
使用双引号 (") 作为记录分隔符。
gsub(",","",$2)
-gsub
函数将搜索所有出现的双引号并将其替换为空字符串。
print
- 将修改后的内容打印到输出中。
答案2
我认为使用 更容易awk
。你可以尝试这样的事情:
$ awk -v v='"' 'BEGIN{FS=OFS=v}{gsub(",","",$2);gsub("\"","",$0);print }' file.txt
0,1,,,10815197,
6,7,010202,,5589,
6,7,010202,,589,
- 基本上,您是
awk
在告诉使用正则表达式-v v='"'
将其用作字段分隔符。 - 你
FS=OFS=v
说字段分隔符与输出字段分隔符相同,即"
. gsub (",","",$2)
,
将第二个字段中的替换为空$2
(在开头和结尾处用 分隔"
)。gsub("\"","",$0)
获取整行并"
在打印输出该行之前替换任何内容。
答案3
sed 不是适合此目的的工具。
$ perl -pe 's|"([\d,]+)"(?=[^"]*$)|$1=~y/,//dr|eg' file
0,1,,,10815197,
6,7,010202,,5589,
6,7,010202,,589,
通过Python。
#!/usr/bin/python3
import sys
import re
file = sys.argv[1]
with open(file, 'r') as f:
for line in f:
print(re.sub(r'"([\d,]+)"(?=[^"]*$)', lambda m: m.group(1).replace(',', ''), line), end = "")
将上面的脚本保存到文件中,script.py
然后运行,然后通过在终端上触发以下命令来运行脚本。
$ python3 script.py inputfile