아래와 같이 공백으로 구분된 텍스트 파일이 있습니다. 첫 번째 열이 각 행의 끝에 오도록 열을 다시 정렬해야 합니다.
or 를 사용하여 이 작업을 수행하는 방법을 알고 있지만 쉬운 방법이 cut -d' ' f1
있는지 궁금합니다 .awk
sed
텍스트 파일:
™️ 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개 매칭 패턴