我有一个标签删除文件,我想添加" $"每个变量的结尾,我可以用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$
任何答案将不胜感激, 感谢
答案 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$
这里发生了什么?
for-loop
我们遍历记录中的所有字段。sub
函数将end
ie(/$/
)替换为$
,即("$"
)为每条记录({{ 1}})。$i
来打印记录。数字print
也表示打印记录的默认操作。答案 4 :(得分:0)
awk '{gsub(/ /,"$ ")}{print $0 "$\r"}' file
a$ seq1$ anot1$
b$ seq2$ anot2$
c$ seq3$ anot3$
d$ seq4$ anot4$
会发生什么? 首先用美元符号和新空间替换空格。 最后在回车前插入美元符号。