我需要使用 shell 脚本在文本文件的前 3 个单词末尾添加逗号

我需要使用 shell 脚本在文本文件的前 3 个单词末尾添加逗号

我需要使用 shell 脚本在文本文件的前 3 个单词末尾添加逗号。

例如:文件.txt

jan Feb Mar  Chennai India
jan Feb Mar  Hyderabad India
jan Feb Mar  Bangalore India

预期输出是:

jan,Feb,Mar,  Chennai India
jan,Feb,Mar,  Hyderabad India
jan,Feb,Mar,  Bangalore India

答案1

$ awk -F'  ' '{ gsub(" ", ",", $1); $1 = $1 "," } 1' OFS='  ' file.txt
jan,Feb,Mar,  Chennai India
jan,Feb,Mar,  Hyderabad India
jan,Feb,Mar,  Bangalore India

这利用了这样一个事实:输入可能被解释为两个双空格分隔的列。它将第一列中的空格替换为逗号,并在其后添加一个逗号。

答案2

有几种方法可以完成这项工作。

sed 可以完成以下工作:

$ cat <your-file> | sed -r 's/(\w+)\s(\w+)\s(\w+)(.*)$/\1, \2, \3,\4/'

阅读也可以完成这项工作:

$ while read c1 c2 c3 rest; do echo $c1, $c2, $c3, $rest; done < <your-file>

awk 也可以完成这项工作:

$ cat <your-file> | awk '{ printf "%s, %s, %s, ", $1, $2, $3; for (i = 4; i <= NF; i++) { printf "%s ", $i; } print ""}'

答案3

也试试这个:

awk '{print $1","$2","$3", " substr($0, index($0,$4))}' file.txt

输出:

jan,Feb,Mar, Chennai India
jan,Feb,Mar, Hyderabad India
jan,Feb,Mar, Bangalore India

答案4

sed是一种更简单的方法。sed提供了一个扩展,它将更改第 k 次出现以及之后的所有情况。

因此,只需将所有空格替换为逗号,并在第四次出现后将逗号替换为空格即可。

例子:

 sed -i -e "s/ /,/g" -e 's/,/ /4g' file.txt

输出 :

jan,Feb,Mar, Chennai India
jan,Feb,Mar, Hyderabad India
jan,Feb,Mar, Bangalore India

相关内容