如何用awk添加每个变量的字符结尾?

时间:2016-07-06 16:17:23

标签: bash awk sed terminal

我有一个标签删除文件,我想添加" $"每个变量的结尾,我可以用awk,sed或其他任何东西做到吗?

示例 输入:

a seq1 anot1
b seq2 anot2
c seq3 anot3
d seq4 anot4

我得知道:

输出:

a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$

任何答案将不胜感激, 感谢

5 个答案:

答案 0 :(得分:3)

仅限bash:

while read line; do echo "${line//$'\t'/\$$'\t'}\$"; done < file

这个hackish解决方案依赖于两个“特殊”的东西 - 参数扩展来进行替换,以及格式扩展以允许解析标签。

在awk中,您可以更安全地处理字段:

awk -F'\t' 'BEGIN{OFS=FS} {for(n=1;n<=NF;n++){$n=$n "$"}} 1' file

这可以通过逐步输入每一行并用自身和美元符号替换每个字段来实现。 BEGIN块确保您的输出将使用与输入相同的字段分隔符。最后的1是“打印当前行”的简写。

答案 1 :(得分:2)

派对迟到了......

另一个awk解决方案。带有“$”的前缀字段和记录分隔符

$ awk -F'\t' 'BEGIN{OFS="$"FS; ORS="$"RS} {$1=$1}1' file

答案 2 :(得分:1)

使用sed:

sed  's/[^ ]*/&$/g' filename

将任何非空格单词替换为单词(&amp;)后跟$。

糟糕!你说标签。你可以用&#34; \ t&#34;替换上面的空格。使用制表符分隔。

sed 's/[^\t]*/&$/g' filename

实际上,甚至更好,对于制表符OR空格:

sed 's/[^[:blank:]]*/&$/g' filename

答案 3 :(得分:1)

awk是你的朋友:

awk '{for(i=1;i<=NF;i++)sub(/$/,"$",$i);print}' file

awk '{for(i=1;i<=NF;i++)sub(/$/,"$",$i);}1' file

示例输出

a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$

这里发生了什么?

  1. 使用for-loop我们遍历记录中的所有字段。
  2. 我们使用awk sub函数将end ie(/$/)替换为$,即("$")为每条记录({{ 1}})。
  3. 明确使用$i来打印记录。数字print也表示打印记录的默认操作。

答案 4 :(得分:0)

awk '{gsub(/ /,"$ ")}{print $0 "$\r"}' file
a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$

会发生什么? 首先用美元符号和新空间替换空格。 最后在回车前插入美元符号。