핀란드어-체코어에서 체코어-핀란드어로 사전 변경

핀란드어-체코어에서 체코어-핀란드어로 사전 변경

이 파일이 있어요http://sinivalkoiset.wz.cz/ostatni/finnish-czech.txt 첫 번째 열을 두 번째 열로 바꾸고 싶습니다. 나는 sed 추천을 사용했다

sed -ne 's/\([^a-z A-Z].*\) \(.*\)$/\2 \1/ p' finnish-czech.txt

두 번째 역참조는 유효하지만 첫 번째 역참조는 유효하지 않습니다. 나는 역참조의 끝으로 "공간"을 사용합니다. 하지만 어떤 단어에는 두 단어가 포함되어 있기 때문에 그런 식으로 작동하지 않는다는 것을 깨달았습니다.

답변1

뭔가 제안해도 될까요 awk?

awk 'BEGIN {OFS=FS="\t"} {sub(/\r/, ""); print $2,$1}' finnish-czech.txt

이렇게 하면 파일에서 Windows 캐리지 리턴도 제거됩니다.

답변2

다른 언어의 단어는 공백이 아닌 탭으로 구분됩니다. Sed는 탭을 처리하지 않지만 $'\t'bash에서 사용할 수 있습니다.

sed -e 's/\(.*\)'$'\t''\(.*\)/\2'$'\t''\1/' finnish-czech.txt

dos2unix그러나 그렇게 하기 전에 파일에서 Windows 줄 끝을 실행하거나 제거하여 제거하십시오 fromdos.

답변3

파일에는 Windows 스타일의 줄 끝이 있습니다. 이로 인해 상황이 혼란스러울 수 있습니다. 또한 시작 부분에 몇 가지 추가 문자가 있습니다.

$ wget -O - http://sinivalkoiset.wz.cz/ostatni/finnish-czech.txt 2>/dev/null | head -n1 | od -c
0000000 357 273 277   A   f   r   i   k   k   a  \t   A   f   r   i   k
0000020   a  \r  \n
0000023

어쨌든, 너무 의존적이지 않다면 sed이런 종류의 것을 사용하기 쉽습니다 awk.

tr -d $'\r'  < finnish-czech.txt | awk -F"\t" -vOFS="\t" '{print $2,$1}' 

제거되면 awk는 두 번째 필드를 인쇄한 다음 첫 번째 필드를 인쇄합니다 tr. 입력 필드 구분 기호를 탭으로 \r설정하고 -F"\t"(한 줄에 2단어 이상이 허용되지 않는 한 이 작업을 수행할 필요가 없음) -vOFS=:\t"출력 구분 기호를 탭으로 설정합니다.

답변4

패턴 그룹화를 사용하여 열을 캡처한 후 바꿀 수 있습니다.

sed 's/^\([^[:blank:]]\+\)\([[:blank:]]\+\)\([^[:blank:]]\+\).*/\3\2\1/' file.txt

관련 정보