Git-bash UNIX: Cut を使用した列/フィールドの切り替え?

Git-bash UNIX: Cut を使用した列/フィールドの切り替え?

そのため、次の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

熱を使用しcutpaste切り替える方法を知っている人はいますか?cut -f1ORが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

おすすめ記事