文件的行到列转换

yis*_*sha 20 sed awk text-formatting

假设我有一个文件:

文件1:

PAPER  TEAM  MANISH NISHA GARIMA JYOUTI ........etc 
Run Code Online (Sandbox Code Playgroud)

我想要的文件 2:

PAPER    
TEAM
MANISH
NISHA
GARIMA    
JYOUTI
Run Code Online (Sandbox Code Playgroud)

File1 的行到列转换。

αғs*_*нιη 26

使用tr,将每个重复的空格字符 ( ) 替换为单个换行 ( \n) 字符。

tr -s ' '  '\n'< infile > outfile
Run Code Online (Sandbox Code Playgroud)

但我认为你想要这样的东西?

原来的 转置
0 1 2 3 
a bcd
# $ @ %

0 a # 
1 b $
2 c @
3 d %

随着awk我们可以这样做:

0 1 2 3
a b c d
# $ @ %

这将每个相同的END字段编号位置连接在一起,并打印出第一列中的第一行、第二列中的第二行等结果。当然,输入文件受限于您的内存大小。


fre*_*ini 11

您也可以使用以下fmt命令:

~$ cat f
PAPER  TEAM  MANISH NISHA GARIMA JYOUTI
~$ fmt -1 f
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
Run Code Online (Sandbox Code Playgroud)


Avi*_*Raj 9

您可以通过 grep 简单地做到这一点。默认情况下,grep 会在单独的换行符中打印匹配项。

grep -oP '\S+' infile > outfile
Run Code Online (Sandbox Code Playgroud)

或者

grep -o '[^[:space:]]\+' infile > outfile
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 7

使用GNU datamash

$ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
Run Code Online (Sandbox Code Playgroud)


slm*_*slm 6

您也可以使用sed

$ sed -e 's/  */\n/g' file1 > file2
Run Code Online (Sandbox Code Playgroud)

注意:不处理单词包含空格的情况。

  • 据我所知,这需要 GNU sed。mac (BSD) 附带的版本不会将 '\n' 视为换行符 (2认同)

jas*_*yan 5

使用awk,将输出字段分隔符 ( OFS) 设置为记录(行)分隔符 ( RS):

awk '{OFS=RS;$1=$1}1' file > file2
Run Code Online (Sandbox Code Playgroud)