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

열을 사용 cut하고 paste전환하는 방법을 아는 사람이 있습니까? 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

답변2

그래서 나는 다음과 같이 무엇을 하고 싶은지 알아냈습니다.

cut -d' ' -f1 file.txt > f1.txt

첫 번째 열을 잘라서 새 파일 f1.txt에 추가합니다.

cut -d' ' -f4 file.txt > f2.txt

두 번째 열을 잘라서 새 파일 f2.txt에 추가합니다.

paste f2.txt f1.txt > file.txt

마지막으로 원본 file.txt를 전환된 열로 덮어씁니다.

관련 정보