awk用于1到n列的简单制表符分隔

awk用于1到n列的简单制表符分隔,awk,cat,Awk,Cat,我有一个制表符分隔的文件,我想打印的第一列 我更愿意保持我的方法尽可能简单和可复制: awk -F" " '{print $1,"\t" ,$2, "\t", $3}' old.bed > new.bed 但是,当我尝试对新文件进行进一步分析时,我得到一个错误,即该文件的格式出乎意料 我通过以下方式检查文件的内容: cat -A new.bed | more chr1 3000870 3000918$ chr1 3000870 3000918$ chr1

我有一个制表符分隔的文件,我想打印的第一列

我更愿意保持我的方法尽可能简单和可复制:

awk -F" " '{print $1,"\t" ,$2, "\t", $3}' old.bed > new.bed
但是,当我尝试对新文件进行进一步分析时,我得到一个错误,即该文件的格式出乎意料

我通过以下方式检查文件的内容:

cat -A new.bed | more

chr1     3000870     3000918$
chr1     3000870     3000918$
chr1     3000872     3000920$
chr1     3000872     3000920$
chr1     3000872     3000920$
看起来很正常

出了什么问题?我如何避免它?

文件中没有$。是cat的-A标志将它们添加到显示屏中。man cat的相关部件:

只要放下-A标志,美元就不会再显示了

此外,我不确定awk命令是否100%实现了您的预期。 输出实际上不是col1 tab col2 tab col3, 但是col1空间选项卡空间col2空间选项卡空间col3。 这是因为print命令中的每一个都被替换为字段分隔符,除此之外,您还添加了选项卡。 下面是一种使“列”选项卡分离的简单方法:

awk -v OFS='\t' '{print $1, $2, $3}'

由于您的输入是以制表符分隔的,因此可以使用cut作为简单且可复制的方法:

cut -f 1-3 old.bed
至于你的美元问题,janos已经完全回答了

cut -f 1-3 old.bed