Unix 从第二列开始替换
我有以下文件:Unix 从第二列开始替换,unix,sed,replace,dataset,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
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
从第二栏开始,有什么替换的建议吗
注意:我的原始数据集有数千列和行。编辑:因为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
使用sed:
sed 's/ //g;s/\([0-9]\{5\}\)\([0-9]\+\)/\1 \2/' file
第一个命令删除所有空格,第二个命令对数字进行分组,这可能对您有用(GNU-sed):
将列后面的第一组空格替换为换行符。删除所有其他空格。将换行符替换为空格。您似乎已经更改了您现在期望的输出:)现在让我也调整一下我的代码。如果您可以访问GNU sed,您可以使用
sed的//[[:space:]//2g'
(或sed-r的//[:space:]+//2g'
)谢谢Ravinder,很抱歉,我编辑了我的问题。拜托,你能把你的节目安排好吗?
sed 's/\([^ ]\) */\1\n/1;s/ //g;s/\n/ /' file