awk 또는 sed, 첫 번째 열을 끝으로 이동하시겠습니까?

awk 또는 sed, 첫 번째 열을 끝으로 이동하시겠습니까?

아래와 같이 공백으로 구분된 텍스트 파일이 있습니다. 첫 번째 열이 각 행의 끝에 오도록 열을 다시 정렬해야 합니다.

or 를 사용하여 이 작업을 수행하는 방법을 알고 있지만 쉬운 방법이 cut -d' ' f1있는지 궁금합니다 .awksed

텍스트 파일:

™️       trade mark
ℹ️       information
↔️..↙️    left-right arrow..down-left arrow
↩️..↪️    right arrow curving left..left arrow curving right
⌚..⌛    watch..hourglass done
⌨️       keyboard
⏏️       eject button
⏩..⏳    fast-forward button..hourglass not done
⏸️..⏺️    pause button..record button
Ⓜ️       circled M
▪️..▫️    black small square..white small square
▶️       play button
◀️       reverse button

기호 목록이 설명을 따르기를 바랍니다.

답변1

사용sed

sed 's/\([^ ]*\) *\(.*\)/\2 \1/' infile

\([^ ]*\)공백이 아닌 문자가 나타날 때까지 모든 항목과 일치합니다 .
괄호는 \(...\)그룹 매칭에 사용되며 해당 인덱스는 입니다 \1.

\(.*\)첫 번째 그룹 이후의 모든 항목을 일치시키고 색인을 생성합니다 \2. 그룹 내에서 일치
하면 출력에서 ​​그룹 1과 그룹 2 사이의 공백과 일치하는 모든 내용이 무시됩니다. (GNU 사용 ) 또는 (표준)을 사용하여 ASCII SPC뿐만 아니라 모든 공백 문자와 일치시킬 수 있습니다.*\(...\) *\(...\)\s*sed[[:space:]]*

그런 다음 마지막으로 먼저 일치하는 항목을 인쇄합니다.그룹 2비교하다그룹 1그 사이에 공간이 있습니다.

답변2

awk '{first = $1; $1=""; print $0, first}' file.txt

첫 번째 열을 변수에 저장하고, 첫 번째 열에 공백을 쓰고, 전체 행( $0$예, 전체 행, 이제 첫 번째 열은 비어 있음)을 인쇄한 다음 첫 번째 열을 인쇄합니다.

답변3

awk '{ printf "%s ",$NF;for (i=2;i<=NF-1;i++) { printf " %s",$i } printf "\n" }' filename

awk의 경우 $NF는 마지막 데이터 조각을 나타냅니다. 이것을 인쇄한 다음 마지막 필드를 제외하고 2에서 1까지 다른 필드를 반복하여 인쇄합니다.

답변4

펄 사용:

perl -pe 's/(\S+)(\s+)(.*)/$3$2$1/' file

(\S+)공백이 아닌 모든 문자를 처음부터 캡처

(\s+)캡쳐 캐릭터 뒤의 모든 공백을 캡쳐하세요

(.*)라인 끝까지 다른 모든 것을 캡처하십시오.

$3$2$1역방향 3개 매칭 패턴

관련 정보