2009-06-24 5 views
25

에서 출력 필드의 순서를 강제 :나는 이런 식으로 뭔가하고 싶은 잘라 내기 명령

cat abcd.txt | cut -f 2,1 

을 나는 순서 2와 출력에 다음 1되고 싶어요. 필자가 시험하고있는 머신 (FreeBSD 6)에서 이것은 일어나지 않습니다 (1,2 순서로 인쇄 중). 어떻게하는지 말해 줄 수 있어요?

필자는이 반전을 수행하기 위해 항상 쉘 스크립트를 작성할 수 있지만 'cut'명령 옵션을 사용하여 찾고있는 항목을 찾고 있습니다.

나는 coreutils 버전 5.2.1을 사용하고 있다고 생각합니다.

답변

27

잘라 내기을 사용하여 수행 할 수 없습니다. 매뉴얼 페이지에 따르면 :

선택한 입력은 읽은 순서대로 쓰여지고 정확히 한 번 쓰여집니다.

대신 다음과 같이 AWK를 사용하여 수행 할 수 있습니다

awk '{print($2,"\t",$1)}' abcd.txt 

은 필드 구분자로 사용하고 어떤하는 \ t를 교체합니다.

11

Lars의 답변은 좋았지 만 더 나은 답변을 발견했습니다. 그의 문제는 \ t \ t 열과 일치하지 않는다는 것입니다.

-F"\t"정확히 (탭)을 절단하는 것입니다 :

awk -v OFS=" " -F"\t" '{print $2, $1}' abcd.txt 

다음이 사용 문제를 해결합니다.

echo 'A\tB\t\tD' | awk -v OFS=" " -F"\t" '{print $2, $4, $1, $3}' 

이 출력 :

-v OFS=" "는 (두 대)와

예 분리해서 무엇이며

B D A  
+1

가 시그윈에서 I 교체 -F "\의 t"를 함께 가지고를 - 이 작업을 수행 할 수 없습니다. –

관련 문제