ファイルがあるとします:
File1:
PAPER  TEAM  MANISH NISHA GARIMA JYOUTI ........etc 
File2が欲しい:
PAPER    
TEAM
MANISH
NISHA
GARIMA    
JYOUTI
File1の行から列への変換。
ファイルがあるとします:
File1:
PAPER  TEAM  MANISH NISHA GARIMA JYOUTI ........etc 
File2が欲しい:
PAPER    
TEAM
MANISH
NISHA
GARIMA    
JYOUTI
File1の行から列への変換。
回答:
を使用してtr、繰り返される各スペース文字を置き換えます()を単一の改行)\n。
tr -s ' '  '\n'< infile > outfile
1 2 3 4 1 a#
abcd-> 2 b $
#$ @%3 c @
                4 d%
awk私たちが行うことができます:
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] FS $i: $i) } 
    END{ for (i in RtoC) print RtoC[i] }' infile
これにより、それぞれ同じフィールド番号が結合されEND、1列目の1行目、2列目の2行目などの結果が出力されます。もちろん、入力ファイルはメモリサイズに制限されます。
これは単にgrepを使用して行うことができます。デフォルトでは、grepは、一致を別の改行で出力します。
grep -oP '\S+' infile > outfile
または
grep -o '[^[:space:]]\+' infile > outfile
              grep
                    $ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
              datamashタスクに最適なツールのように思えますが、他にいくつのツールを使用できるかが魅力的です!
                    を使用してawk、出力フィールド区切り記号(OFS)をレコード(行)区切り記号()として設定しますRS。
awk '{OFS=RS;$1=$1}1' file > file2
              また、使用してみることができます sed
$ sed -i.bak s@' '@'\n'@g infile.txt
@置換操作のセパレータとして使用していることに注意してください。これにより、バックアップファイルも作成されます。バックアップが不要な場合は、.bakを削除します
$ sed -i s@' '@'\n'@g infile.txt
              Pythonバージョン:
python -c "import sys;lines=[l.replace(' ','\n') for l in sys.stdin.readlines()];print(''.join(lines))" < input.txt > output.txt
これは<、Pythonのstdin input.txtへのリダイレクトをoutput.txt使用し、>リダイレクトの使用に書き込みます。ワンライナー自体は、すべての行をstdinを文字列のリストに。すべてのスペースは改行で置き換えられ、.join()関数を使用してテキスト全体を再構築します。
連続した複数のスペースが改行に置き換えられるのを避けるための代替アプローチは、.split()行を単語のリストに分割することです。そうすれば、各単語が1つの改行だけで区切られていることを確認できます。
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt > output.txt
              を使用xargsして(souravcの答えから盗まれた):
xargs -n 1 < File1 > File2
または、マイナーな再フォーマットが必要な場合は、必要に応じてprintfフォーマット文字列を使用します。
xargs printf '%s\n' < File1 > File2
              私の解決策は次のとおりです。
#!/bin/bash
cols=$(head -1 file.txt | wc -w)
for i in $(seq 1 $cols); do
cut -d ' ' -f$i file.txt | tr '\n' ' ' | sed s'/.$//'
echo
done