从第二列开始替换

时间:2018-06-06 13:16:07

标签: unix sed replace dataset

好吧,我有以下文件:

12721   2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2
12722   2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2
12734   2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2
12753   2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2
12756   2 2 2 1 1 2 1 2 1 1 1 2 2 1 1 2 1 2 1 1 2

我需要从第二列开始删除空格,以便我的文件如下所示:

12721 222112121112211212112
12722 222112121112211212112
12734 222112121112211212112
12753 222112121112211212112
12756 222112121112211212112

我尝试使用此命令替换:

sed '1,$s/ //g' snpdata > snpdata1

它没有用,我明白了:

12721222112121112211212112
12722222112121112211212112
12734222112121112211212112
12753222112121112211212112
12756222112121112211212112

从第二列开始替换的任何建议?

注意:我的原始数据集有数千个列和行。

3 个答案:

答案 0 :(得分:1)

编辑: 由于OP现在改变了预期的输出,所以稍微调整一下代码,这应该有助于OP获得最新的预期输出。

awk '{val=$1;$1="";gsub(/[[:space:]]+/,"");print val,$0}'  Input_file

关注awk可能会对您有所帮助。

awk '{val=substr($0,5);gsub(/ +/,"",val);print substr($0,1,4), val;val=""}' Input_file

答案 1 :(得分:1)

使用sed:

 sed 's/ //g;s/\([0-9]\{5\}\)\([0-9]\+\)/\1 \2/' file

其中第一个命令删除所有空格,第二个命令分组数字

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed 's/\([^ ]\)  */\1\n/1;s/ //g;s/\n/ /' file

用换行符替换列后面的第一组空格。删除所有其他空格。用空格替换换行符。