我有一个包含一列和10行的文件。每列具有相同的字符数(5)。从这个文件中我想得到一个包含10行和5列的文件,其中每列只有1个字符。我不知道如何在Linux中这样做..任何帮助? AWK会这样做吗?
然而,真实数据具有更多行(> 4K)和字符(> 500K)。以下是真实数据的简短版本:
31313
30442
11020
12324
00140
34223
34221
43124
12211
04312
期望的输出:
3 1 3 1 3
3 0 4 4 2
1 1 0 2 0
1 2 3 2 4
0 0 1 4 0
3 4 2 2 3
3 4 2 2 1
4 3 1 2 4
1 2 2 1 1
0 4 3 1 2
谢谢!
答案 0 :(得分:3)
我认为这样做符合你的要求:
$ awk -F '' '{ $1 = $1 }1' file
3 1 3 1 3
3 0 4 4 2
1 1 0 2 0
1 2 3 2 4
0 0 1 4 0
3 4 2 2 3
3 4 2 2 1
4 3 1 2 4
1 2 2 1 1
0 4 3 1 2
输入字段分隔符设置为空字符串,因此每个字符都被视为字段。 $1 = $1
表示awk"触及"每个记录,使其重新格式化,在每个字符之间插入输出字段分隔符(空格)。 1
是最短的" true"条件,导致awk打印每条记录。
请注意,将字段分隔符设置为空字符串的行为不是很明确,因此可能不适用于您的awk版本。您可能会发现不同地设置字段分隔符,例如使用-v FS=
为你工作。
或者,你可以在Perl中做同样的事情:
perl -F -lanE 'say "@F"' file
-a
将每个输入记录拆分为特殊数组@F
。 -F
后跟没有任何内容将输入字段分隔符设置为空字符串。 @F
周围的引号表示在每个元素之间插入列表分隔符(默认为空格)。
答案 1 :(得分:2)
您也可以使用此sed
:
sed 's/./& /g; s/ $//' file
3 1 3 1 3
3 0 4 4 2
1 1 0 2 0
1 2 3 2 4
0 0 1 4 0
3 4 2 2 3
3 4 2 2 1
4 3 1 2 4
1 2 2 1 1
0 4 3 1 2
答案 2 :(得分:0)
奇怪的是,这对大多数标准Unix工具来说并不容易(更新:except, apparently, with awk
)。我会用Python:
{{1}}
(这不是最好的惯用Python,但只需要一个简单的单线程。)
答案 3 :(得分:0)
此任务的另一个unix工具链
result