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 |
0 a # |
随着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)
您可以通过 grep 简单地做到这一点。默认情况下,grep 会在单独的换行符中打印匹配项。
grep -oP '\S+' infile > outfile
Run Code Online (Sandbox Code Playgroud)
或者
grep -o '[^[:space:]]\+' infile > outfile
Run Code Online (Sandbox Code Playgroud)
使用GNU datamash:
$ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
Run Code Online (Sandbox Code Playgroud)
您也可以使用sed
:
$ sed -e 's/ */\n/g' file1 > file2
Run Code Online (Sandbox Code Playgroud)
注意:不处理单词包含空格的情况。
使用awk
,将输出字段分隔符 ( OFS
) 设置为记录(行)分隔符 ( RS
):
awk '{OFS=RS;$1=$1}1' file > file2
Run Code Online (Sandbox Code Playgroud)