我有一个包含100000行的文件
1 0110100010010101
2 1000010010111001
3 1000011001111000
10 1011110000111110
123 0001000000100001
我想知道如何通过在字符之间添加空格来有效地显示第二个字段。
0 1 1 0 1 0 0 0 1 0 0 1 0 1 0 1
1 0 0 0 0 1 0 0 1 0 1 1 1 0 0 1
1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 0
1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 0
0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1
一种解决方案是使用awk获取第二列,然后使用sed添加空格。但由于文件太长,我想避免使用管道。然后我想知道我是否可以通过使用awk来做到这一点。
提前致谢
答案 0 :(得分:4)
这样可以吗?
awk '{gsub(/./,"& ",$2);print $2}' yourFile
示例强>
kent$ echo "1 0110100010010101
2 1000010010111001
3 1000011001111000"|awk '{gsub(/./,"& ",$2);print $2}'
0 1 1 0 1 0 0 0 1 0 0 1 0 1 0 1
1 0 0 0 0 1 0 0 1 0 1 1 1 0 0 1
1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 0
<强>更新强>
第1列超过2位数不起作用?我没有得到它:
kent$ echo "133 0110100010010101
233 1000010010111001
333 1000011001111000"|awk '{gsub(/./,"& ",$2);print $2}'
0 1 1 0 1 0 0 0 1 0 0 1 0 1 0 1
1 0 0 0 0 1 0 0 1 0 1 1 1 0 0 1
1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 0
gsub(/./,"& ", $2)
1 /./ match any single character
2 "& " & here means the matched string, in this case, each character
3 $2 column 2
so it means, replace each character in 2nd column into the character itself + " ".
答案 1 :(得分:2)
仅使用awk
的一种方式:
awk '{ gsub( /./, "& ", $2 ); print $2; }' infile
产量:
0 1 1 0 1 0 0 0 1 0 0 1 0 1 0 1
1 0 0 0 0 1 0 0 1 0 1 1 1 0 0 1
1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 0
编辑:肯特,我给出了相同的实现,因此,为了使这个答案更有用,我将添加sed
一个:
sed -e 's/^[^ ]* *//; s/./& /g' infile
答案 2 :(得分:2)
只需添加一个sed替代品:
sed -e 's/^.* *//;s/./& /g;s/ $//' file
三个命令:
答案 3 :(得分:1)
sed
解决方案。
sed 's/.* //;s/\(.\)/\1 /g'
它在每行的末尾添加了额外的空格。将;s/ $//
添加到表达式中以将其删除。
答案 4 :(得分:0)
这可能适合你(GNU sed):
sed 's/^\S*\s*//;s/\B/ /g' /file