그래서 다음과 같은 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
두 번째 열을 잘라서 새 파일 f2.txt에 추가합니다.
paste f2.txt f1.txt > file.txt
마지막으로 원본 file.txt를 전환된 열로 덮어씁니다.