(同じ行に)このような順序で番号が付けられた.txtファイルがあります。
106849_01373 106849_01967 106850_00082 23025.7_01059
私はそれらをそのように変換したいと思います:
106849_01373
106849_01967
106850_00082
23025.7_01059
使用するコマンドがわかりません。誰かがこれを手伝ってくれる?
(同じ行に)このような順序で番号が付けられた.txtファイルがあります。
106849_01373 106849_01967 106850_00082 23025.7_01059
私はそれらをそのように変換したいと思います:
106849_01373
106849_01967
106850_00082
23025.7_01059
使用するコマンドがわかりません。誰かがこれを手伝ってくれる?
回答:
こちらは xargs
xargs -n1 < file.txt
デモ:
$ cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
$ xargs -n1 < file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
とても簡単tr
:
tr -s '[:blank:]' '\n' <file.txt
例:
% cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
% tr -s '[:blank:]' '\n' <file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
heemaylの答えは進むべき道ですが、Perlを使用する別の方法があります。
perl -lane '$,="\n"; print(@F)' file.txt
-l
:自動改行処理を有効にします。2つの異なる効果があります。まず、-nまたは-pと一緒に使用すると、$ /(入力レコード区切り文字)が自動的に表示されます。次に、$ \(出力レコードセパレーター)をoctnumの値に割り当てて、すべての印刷ステートメントにそのセパレーターが追加されるようにします。octnumを省略すると、$ \を$ /の現在の値に設定します。-a
:-nまたは-pとともに使用すると、自動分割モードがオンになります。@F配列への暗黙の分割コマンドは、-nまたは-pによって生成される暗黙のwhileループ内で最初に実行されます。-n
:プログラムの周りでPerlが次のループを想定するようにします。これにより、sed -nまたはawkのようなファイル名引数を反復処理します。
LINE:
while (<>) {
... # your program goes here
}
-e
:プログラムの1行を入力するために使用できます。
$,="\n"
:出力フィールドセパレータを改行に設定します。print(@F)
:出力フィールド区切り文字で区切られたフィールドを印刷します。% cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
% perl -lane '$,="\n"; print(@F)' file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
AWK
アプローチ。基本的に、フィールドの出力セパレーターの変更とループ。テストファイルは、ENDLINEを最後に繰り返し貼り付けた例です
$ awk 'BEGIN{OFS="\n"}{for(i=1;i<=NF;i++) print $i}' some_data
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
私は楽しみのためにPythonソリューションを追加するだけです:
python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile
このコマンドは、変換するファイル名を最後に引数として使用して、単一引用符で囲まれた1行のPython 3スクリプトを実行します。構文は次のとおりです。
python3 -c 'PYTHON_COMMAND_OR_1-LINE-SCRIPT' ARGUMENTS
使用する1行のスクリプトは次のとおりです(明確にするために複数行に展開されています)。
import sys
f=open(sys.argv[1])
print(*f.read().split(),sep="\n")
sys
モジュールをインポートしてコマンドライン引数を読み取り、最初に指定された引数をファイル名として開いて、空白文字で区切られた各データチャンクをファイルから1行に出力します。
$ cat mytestfile
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
$ python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059