【发布时间】:2026-01-27 15:20:10
【问题描述】:
我想在文件的每一行末尾添加一个换行符 '\n'。
这是我的代码:
while read -r line
do
echo "$line"|awk -F'\t' '{
print($1);
for (i=2; i<=NF; i++){
split($i,arr,":")
print(arr[1])
};
}' | tr '\n' '\t' | tr '|' ' ' | tr '/' ' ' | {END OF LINE, WANNA ADD NEW LINE}
>> genotype_processed.txt
done < file_in
另外,有什么方法可以将 3 个 tr 命令合并为一个?它们看起来太多余了。
非常感谢!
编辑:
输入看起来像这样:
id123 0|1:a:b:c 0/0:i:j:k ...
id456 1/1:j:f:z 1|0:.:j:v ...
...
想要的输出:
id123 0 1 0 0 ...
id456 1 1 1 0 ...
...
【问题讨论】:
-
一个简单的
echo行不通? -
@ZumodeVidrio 不,这真的很奇怪。我试过了| echo '\n',这显然不起作用。那么 | echo "\n",在我的文件中只出现了 \n。然后 printf 和 print 也不起作用。我现在不知道该怎么办:(
-
因为
echo只打印它的参数,而不是输入。除了在管道之后使用echo,您还可以插入带有| sed 's/$/\n/'的换行符,它将当前行的末尾替换为\n -
@Zelnes 管道后的 sed 完美运行!非常感谢!
-
你为什么不在一个
awk内执行所有这些循环,而不是在每一行上产生 4 个以上的进程?无论如何,您都在调用awk,删除read并让它处理整个文件。