각 줄의 홀수 단어와 짝수 단어를 바꾸는 방법은 무엇입니까?

각 줄의 홀수 단어와 짝수 단어를 바꾸는 방법은 무엇입니까?

한 파일에서 홀수 및 짝수 문자열을 바꾸고 다른 파일에 저장하는 bash 스크립트가 있습니다.

#!/bin/bash

infile="inputfile"
outfile="outputfile"

{
while read -r odd && read -r even
do
    echo "$even"
    echo "$odd"
    unset odd
done < "$infile"

# in case there are an odd number of lines in the file, print the last "odd" line read
if [[ -n $odd ]]; then
    echo "$odd"
fi
} > "$outfile"

홀수와 짝수를 바꾸는 방법성격파일의 각 줄에?

예:

입력 파일:

one two three four five six
apple banana cocoa dish fish nuts

결과물 파일:

two one four three six five
banana apple dish cocoa nuts fish

답변1

사용행복하다(이전 Perl_6)

raku -ne 'put .words.rotor(2).map(*.reverse);'  

또는

raku -ne '.words.rotor(2).map(*.reverse).put;'

또는

raku -ne '.words.rotor(2)>>.reverse.put;' 

입력 예:

one two three four five six
apple banana cocoa dish fish nuts

예제 출력:

two one four three six five
banana apple dish cocoa nuts fish

위 내용은 Perl 계열의 프로그래밍 언어인 Raku로 작성된 답변입니다. 즉, raku한 줄씩 자동 인쇄가 아닌 플래그를 사용하여 명령줄에서 호출됩니다. 또는 명령줄 플래그를 -ne사용할 때 각 줄은 Raku "테마 변수"( Perl에서는 "테마 변수"라고도 함) 라고도 불리는 에 로드됩니다 . 선행 점은 주제 변수 에 다음 방법이 적용됨을 나타내는 약칭 형태입니다 . 연속적인 메소드는 도트 연산자와 함께 연결되며 , 각 메소드는 차례로 입력 데이터를 변환합니다.-ne-pe$_$_.$_.$_.

이러한 방법을 살펴보면, 한 줄씩 입력되는 내용이 공백으로 구분된 words다음 rotor단어 쌍으로 함께 구성되는 것을 볼 수 있습니다(즉, 2인수가 제공됨). 함수 이름이 rotor다소 모호할 수 있지만 데이터 개체의 개별 요소가 반복되거나 rotor편집되고 함께 그룹화/집계된다는 의미인 것 같습니다. -ing 후에 rotor각 쌍은 사용 및 적용되는 기능에 의해 개별적으로 처리됩니다. 마지막으로 출력은 다음과 같이 인쇄됩니다.mapreverseput

위의 코드( rotor기본값 사용)는 끝에 있는 "불완전한 요소 집합"을 제거합니다. 마지막에 "불완전한 요소 집합"을 유지하려면 호출을 변경하여 rotorTrue 매개변수를 추가 partial하거나 batch동일한 의미인 다음을 사용하세요.

raku -ne 'put .words.rotor(2, partial => True).map(*.reverse);' 

이는 다음과 같습니다.

raku -ne 'put .words.rotor(2, :partial).map(*.reverse);'

이는 다음과 같습니다.

raku -ne 'put .words.batch(2).map(*.reverse);'

https://raku.org

답변2

sed@guest_7이 제안한 것을 제안합니다 .

$ sed -e 's/\([^ ]\+\) \([^ ]\+\)/\2 \1/g' inputfile 
two one four three six five 
banana apple dish cocoa nuts fish

답변3

이를 사용하려면 perl입력 단어 배열(@F)에서 두 개의 선행 요소를 잘라내고 뒤집은 다음 출력 배열(@A)에 추가하면 됩니다.

perl -slane 'my @A;
  push @A, reverse splice @F, 0, 2
    while @F > 1;
  print @A, @F;
' -- -,=\  ./yourfile

쉘 자체를 사용하십시오.

cat yourfile |
while IFS= read -r l
do
  set -f; set -- $l
  while [ "$#" -gt 1 ]
  do
    printf '%s ' "$2" "$1"
    shift 2
  done
  echo "${1-}"
done

awk '
{
  t=$0;$0="";split(t, a)
  for (i=1; i+1 in a; i+=2) {
    $(i) = a[i+1]
    $(i+1) = a[i]
  }
  if (i in a) $(i) = a[i]
}1
' yourfile

을 통해 python우리는 목록 슬라이싱 및 목록 이해 기능을 활용합니다.

python3 -c 'import sys
with open(sys.argv[1]) as f:
  for l in f:
    F = l.strip().split()+[""]
    print(*[f"{b} {a}" for a,b in zip(F[::2],F[1::2])])
' yourfile

답변4

#!/usr/bin/python
k=open('file1','r')
for line in k:
    fina_list=[]
    con=line.strip().split(' ')
    for raco in range(0,len(con),2):
        if (int(raco)%2 == 0):
            odd_cha=con[raco+1]
            even_cha=con[raco]
            con[raco]=odd_cha
            con[raco+1]=even_cha
            fina_list.append(con[raco])
            fina_list.append(con[raco+1])
    print " ".join(fina_list)

산출

two one four three six five
banana apple dish cocoa nuts fish

관련 정보