bash - 列表处理,将列表转换为撇号和逗号分隔的记录,用括号括起来

标签 bash awk

我在名为 Target_id_convert.txt 的文件中有一个列表

70S ribosome
ALK tyrosine kinase receptor
ATP
ATP synthase

期望的输出

('70S ribosome','ALK tyrosine kinase receptor','ATP','ATP synthase')

这段代码是我写的

sed -e "s/'/'\\\\''/g;s/\(.*\)/'\1'/" Target_id_convert.txt  > Target_id_convert1.txt
tr '\n' ',' < Target_id_convert1.txt > Target_id_convert_output.txt

然后我必须手动编辑文件并在 Target_id_convert_output.txt 文件中添加 (),请告诉我如何一次高效地完成它,因为这一切都应该是自动化的。

最佳答案

这个 awk 单行代码应该做你想做的事:

awk -v q="'" '{$0=q $0 q;printf "%s%s", (NR==1?"(":","),$0}END{print ")"}' file

我声明一个 var q 有单引号 ('),以避免许多转义。

关于bash - 列表处理,将列表转换为撇号和逗号分隔的记录,用括号括起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43321210/

相关文章:

shell - 将参数作为数组从 shell 传递到 awk

bash - 加入/awk : Join 2 files on a column

linux - 使用打开进程的时间保存变量

bash - 对行组进行排序

shell - 计算 fasta 文件中的读取次数(循环)

linux - 使用 shell 命令从目录中删除旧备份

bash - 为什么这个自定义采购函数不能使我声明的变量全局可用?

linux - 获取具有最新日期名称的文件夹

linux - 在 Bash 中生成系统增量编号文件名

BASH SHELL IF ELSE 在后台运行命令