![文件的行到列转换](https://linux22.com/image/34182/%E6%96%87%E4%BB%B6%E7%9A%84%E8%A1%8C%E5%88%B0%E5%88%97%E8%BD%AC%E6%8D%A2.png)
假设我有一个文件:
文件1:
PAPER TEAM MANISH NISHA GARIMA JYOUTI ........etc
我想要的文件2:
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
File1 的行到列转换。
答案1
使用tr
,将每个重复的空格字符 ( ) 替换为单个换行符 (
\n
) 。
tr -s ' ' '\n'< infile > outfile
但我想你想要这样的东西吗?
原来的 | 转置 |
---|---|
0 1 2 3 |
0 a # |
我们可以这样awk
做:
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (i in RtoC?RtoC[i] OFS :"") $i; }
END{ for (i=1; i<=NF; i++) print RtoC[i] }' infile
这会将每个相同的字段编号位置连接在一起,并打印END
结果,即第一列中的第一行,第二列中的第二行,等等。当然,输入文件仅限于您的内存大小。
答案2
您还可以使用以下fmt
命令:
~$ cat f
PAPER TEAM MANISH NISHA GARIMA JYOUTI
~$ fmt -1 f
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
答案3
和GNU 数据混合:
$ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
答案4
使用awk
,将输出字段分隔符 ( OFS
) 设置为记录(行)分隔符 ( RS
):
awk '{OFS=RS;$1=$1}1' file > file2