好吧,我有以下文件:
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
从第二列开始替换的任何建议?
注意:我的原始数据集有数千个列和行。
答案 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
用换行符替换列后面的第一组空格。删除所有其他空格。用空格替换换行符。