如何在其他两个分隔符之间替换分隔符?

ven*_*kat 3 awk text-processing

我有如下字符串:

engineer,doctor,"987,345,123",engineer
Run Code Online (Sandbox Code Playgroud)

我想在unix中将其更改为以下内容:

engineer,doctor,"987345123",engineer
Run Code Online (Sandbox Code Playgroud)

αғs*_*нιη 5

awk当目标列处于固定位置时使用,例如$2在这里。

awk -F\" '{gsub(",","", $2)}1' OFS=\" infile.txt
Run Code Online (Sandbox Code Playgroud)

如上所述,˚F ield分隔符我们定义"并与gsub(",","",$2)我们正在与空字符串替换字段#2中的所有逗号$2。在1末是awk的打印控制,最后用OFS=\"我们告诉awk将打印与各界"再次分离。

一般情况下:

awk -F\" '{for (i=2;i<=NF;i+=2)gsub(",","",$i)}1' OFS=\" infile.txt
Run Code Online (Sandbox Code Playgroud)

输入数据:

engineer,doctor,"987,345,123",engineer
engineer,doctor,"123", "987,345,123",engineer
engineer,doctor,"987,345,123","123,123",engineer
"123,456,789",engineer,doctor,"987345123","123123",engineer
engineer,doctor,"987345123","123123",engineer,"123,456,78,9"
Run Code Online (Sandbox Code Playgroud)

输出将是:

engineer,doctor,"987345123",engineer
engineer,doctor,"123", "987345123",engineer
engineer,doctor,"987345123","123123",engineer
"123456789",engineer,doctor,"987345123","123123",engineer
engineer,doctor,"987345123","123123",engineer,"123456789"
Run Code Online (Sandbox Code Playgroud)