我需要使用 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