そのため、次の2つの列を持つファイルがあります。
10 1
11 2
12 3
13 4
14 5
cutコマンドを使用して列を切り替えたいです。使った
paste <(cut -f2 file.dat) <(cut -f1 file.dat)
それは私に以下を与えます:
10 1 10 1
11 2 11 2
12 3 12 3
13 4 13 4
14 5 14 5
熱を使用しcut
てpaste
切り替える方法を知っている人はいますか?cut -f1
ORがcut -f2
すべての分野を切り取ると思ったのですが、そうではないようですか?私がここで何を間違っているのか?
更新:だから-d
代わりにを使用しているf
が、奇妙な結果が表示されます。しかし、cat
ファイルを送信すると、内容は同じままになりますか?
答え1
デフォルトの区切り記号cut
はタブです。cut
データをスペースで区切るには、パラメータを使用して指定する必要があります-d
。
入力ファイルは以下を使用しているようです。多くの種類難易度を高めるスペース:
paste <(cut -d' ' -f5 file.txt) <(cut -d' ' -f3 file.txt)
1 10
2 11
3 12
4 13
5 14
または、スペースをタブに置き換えることもできます(繰り返しを削除)。ファイルの前にスペースがあるため、フィールドは-f3
合計になります。-f2
paste <(tr -s ' ' '\t' < file.txt | cut -f3) <(tr -s ' ' '\t' < file.txt | cut -f2)
awk
この場合、たとえば使用する方が簡単です。
awk '{print $2,$1}' file.txt
または
awk '{print $2,$1}' OFS='\t' file.txt
タブ区切りの出力が必要な場合(からインポートされたとおりpaste
)例:
$ awk '{print $2,$1}' OFS='\t' file.txt
1 10
2 11
3 12
4 13
5 14
答え2
それで、私は次のように何をしたいのかを見つけました。
cut -d' ' -f1 file.txt > f1.txt
最初の列を切り取り、新しいファイルf1.txtに追加します。
cut -d' ' -f4 file.txt > f2.txt
2番目の列を切り取り、新しいファイルf2.txtに追加します。
paste f2.txt f1.txt > file.txt
最後に、元のfile.txtを切り替えられた列で上書きします。