String 替换最后一行两列中的单词

String 替换最后一行两列中的单词,string,bash,replace,String,Bash,Replace,我有一个文件,每一列在另一列之间至少有一个空格 abc dogdogdogdog 1.0 abc cat 2.4 现在我想把最后一行翻一番,修改第二列和第三列,但空格的布局应该保持不变 结果: abc dogdogdogdog 1.0 abc cat 2.4 abc elephant mystring 怎么做? 现在我正在考虑阅读最后一行,但我不知道如何将变量传递给awk,因为在awk中,我认为只更

我有一个文件,每一列在另一列之间至少有一个空格

abc dogdogdogdog      1.0
abc cat               2.4
现在我想把最后一行翻一番,修改第二列和第三列,但空格的布局应该保持不变

结果:

abc dogdogdogdog      1.0
abc cat               2.4
abc elephant          mystring
怎么做? 现在我正在考虑阅读最后一行,但我不知道如何将变量传递给awk,因为在awk中,我认为只更改某些列很容易

line=$(tail -n 1 $file)
它不会那么长,我确信它总是比该列中的其他字符串短

根据OP的评论,这句呆头呆脑的话应该有帮助(需要呆头呆脑):

举一个例子:

kent$  cat f
abc dogdogdogdog      1.0
abc cat               2.4

kent$  awk '7;END{n=gensub(/\S+(\s+)\S+$/,"new\\1mystring","g");print n}' f
abc dogdogdogdog      1.0
abc cat               2.4
abc new               mystring

请尝试以下内容。(合理警告:仅使用给定示例进行测试)

有点稀疏,所以…
手动代码-您可以推断到编程的内容

$: cat 3col
abc dogdogdogdog      1.0
abc cat               2.4

$: read c1 x <<< $( tail -1 3col ) # read 1st column, throw the rest away
$: printf "%-4s%-18s%s\n" $c1 elephant mystring >> 3col # append col 1 and new values

$: $: cat 3col
abc dogdogdogdog      1.0
abc cat               2.4
abc elephant          mystring
sed的
sed
只打印最后一行的第一列,并丢弃所有其他内容

请注意,从技术上讲,这不会更改最后两列-它保留第一列,并用指定的文本替换其余列


如果这不能处理你所需要的,考虑你可能正在冒充并重新编写你原来的问题来说明你想要完成什么。

欢迎你这样做,请加上你的努力,为了解决你在代码标签中的问题,让我们知道。如果<代码>象< /代码>是一个很长的字符串?i、 e.大于
dogdog
+50个空格?第一排和第二排也应该换吗?或者你保证新的col2将永远适合这一差距?它不会那么长,我相信它总是比其他弦短。
awk -v line="abc elephant my_string" '
BEGIN{
  split(line,array," ")
}
match($0,/ .* +/) && FNR==1{
  val=substr($0,RSTART,RLENGTH)
  sub(/[a-zA-Z]+/," ",val)
}
1;
END{
  print array[1],array[2],substr(val,length(array[2]+1)),array[3]
}'  Input_file
$: cat 3col
abc dogdogdogdog      1.0
abc cat               2.4

$: read c1 x <<< $( tail -1 3col ) # read 1st column, throw the rest away
$: printf "%-4s%-18s%s\n" $c1 elephant mystring >> 3col # append col 1 and new values

$: $: cat 3col
abc dogdogdogdog      1.0
abc cat               2.4
abc elephant          mystring
 printf "%-4s%-18s%-3s\n" $( sed -n '${s/ .*//;p;}' 3col ) elephant mystring >> 3col