awk修改select列中的最后一个字符串

awk修改select列中的最后一个字符串,awk,sed,Awk,Sed,我有一个像这样的csv文件 abc, xym krg plf, 763, bla chabc, yfxym krg gflf, 263, bla bla 我想修改文件中每行第二列的最后一个字符串。Like plf是第1行第2列中的最后一个字符串。我需要将其修改为,plf,使其成为另一列,使其看起来像 abc, xym krg ,plf, 763, bla 感谢您的帮助。提前感谢。试试这个GNU-sed命令 $ sed -r 's/^([^,]*,)( \w+ \w+ )(\w+)(,.*)

我有一个像这样的csv文件

abc, xym krg plf, 763, bla
chabc, yfxym krg gflf, 263, bla bla
我想修改文件中每行第二列的最后一个字符串。Like plf是第1行第2列中的最后一个字符串。我需要将其修改为
,plf
,使其成为另一列,使其看起来像

abc, xym krg ,plf, 763, bla 

感谢您的帮助。提前感谢。

试试这个GNU-sed命令

$ sed -r 's/^([^,]*,)( \w+ \w+ )(\w+)(,.*)/\1\2,\3\4/g' file
abc, xym krg ,plf, 763, bla
chabc, yfxym krg ,gflf, 263, bla bla

语法是
s/pattern/replacement/flags

  • 模式:
    [[:alnum:][]*,
    ,表示“任意数量的字母数字字符和逗号

  • 替换:
    ,&
    ,意思是“一个逗号、一个空格和与
    模式匹配的任何东西”
    $

  • 标志:
    2
    ,表示“仅替换第二次出现的模式”

awk一衬板: 使用您的数据:

kent$  echo "abc, xym krg plf, 763, bla
chabc, yfxym krg gflf, 263, bla bla"|awk -F, -v OFS="," 'gsub(/\S*$/,",&",$2)||1'
abc, xym krg ,plf, 763, bla
chabc, yfxym krg ,gflf, 263, bla bla

用什么替换它?谢谢,我试过了。它把多余的放在plf之后,而不是plf之前。abc,xym krg plf,763,bla chabc,yfxym krg gflf,263,blabla@user3616577通过命令和您的测试数据,它提供了所需的输出。我在测试中专门输入了
1
。)你抄我的命令了吗?请注意:
,&“
我怀疑大多数AWK不知道如何处理
\S
,因此您的整个RE可能只是匹配字符串的结尾。使用POSIX字符类\S的简写形式,或者确定它将与哪些awk一起工作。谢谢您,这非常有效。你能解释一下吗?这样我就可以学习了。Thanks@user3616577我对答案作了解释。另外,你可能想回答这个问题,或者你以前的问题。+1很好!我总是忘记您可以指定事件编号。
$ sed 's/[[:alnum:]]*,/, &/2' csvfile
abc, xym krg , plf, 763, bla
chabc, yfxym krg , gflf, 263, bla bla
awk -F, -v OFS="," 'gsub(/\S*$/,",&",$2)||7' file
kent$  echo "abc, xym krg plf, 763, bla
chabc, yfxym krg gflf, 263, bla bla"|awk -F, -v OFS="," 'gsub(/\S*$/,",&",$2)||1'
abc, xym krg ,plf, 763, bla
chabc, yfxym krg ,gflf, 263, bla bla