짝수/홀수 행을 새 열로 인쇄

짝수/홀수 행을 새 열로 인쇄

단일 열에 X 행이 있는 파일이 있고 각 짝수/홀수 행을 새 열에 인쇄하고 싶습니다. vimLinux나 편집기에서 이것이 가능합니까?

예를 들어:

입력 파일:

RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

필요한 출력 파일:

RESOLUTION: 1.70    UNIT: MONOMERIC
RESOLUTION: 1.80    UNIT: DIMERIC
RESOLUTION: 2.50    UNIT: TRIMERIC
RESOLUTION: 2.20    UNIT: TETRAMERIC

답변1

아래에서 시도해 보세요.

$cat a.txt
RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

$ cat a.txt | sed 'N;s/\n/ /g'
RESOLUTION: 1.70 UNIT: MONOMERIC
RESOLUTION: 1.80 UNIT: DIMERIC
RESOLUTION: 2.50 UNIT: TRIMERIC
RESOLUTION: 2.20 UNIT: TETRAMERIC

답변2

데이터가 z1 파일에 있다고 가정하면

paste -sd "\t\n" z1

생산할 것입니다:

RESOLUTION: 1.70        UNIT: MONOMERIC
RESOLUTION: 1.80        UNIT: DIMERIC
RESOLUTION: 2.50        UNIT: TRIMERIC
RESOLUTION: 2.20        UNIT: TETRAMERIC

이러한 시스템에서는:

OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
bash GNU bash 4.3.30
paste (GNU coreutils) 8.23

행운을 빕니다... 건배, drl

답변3

당신은 올바른 위치(awk 또는 sed)를 찾고 있습니다.

sedgnu 를 사용하면 충분합니다 sed.

바라보다https://www.gnu.org/software/sed/manual/sed.html#Numeric-Addresses

4.2 숫자로 행 선택

first~step 이 GNU 확장은 첫 번째 줄부터 시작하는 모든 단계 줄과 일치합니다. 특히, 현재 행 번호가 first + (n * step)과 같도록 음수가 아닌 n이 있는 경우 행이 선택됩니다. 따라서 1~2를 사용하여 홀수 행을 선택하고 0~2를 사용하여 짝수 행을 선택하여 두 번째 행부터 세 번째 행마다 선택하고, "2~3"을 사용하여 다섯 번째 행을 선택합니다. 10번째 행부터 일단 '10~5'를 사용하고, '50~0'은 50을 모호하게 표현한 것입니다.

다음 명령은 단계 주소의 사용을 보여줍니다.

$ 시퀀스 10 | sed -n '0~4p' 4 8

$ 시퀀스 10 | sed -n '1~3p' 1 4 7 10

답변4

홀수 줄에 후행 공백이 있는 경우 ed스크립트를 작성할 수 있습니다.

{ for((line=1; line <= $(wc -l < input) / 2; line++)); do printf '%d,%dj\n' "$line" "$((line + 1))"; done; echo "wq"; } | ed -s input

재형식화:

{ for((line=1; line <= $(wc -l < input) / 2; line++))
  do 
    printf '%d,%dj\n' "$line" "$((line + 1))"
  done
  echo "wq"
} | ed -s input

일반적인 아이디어는 줄 수를 세어 이를 2로 나누면 인쇄 ed명령이 홀수 줄과 짝수 줄을 연결하는 것입니다. 8줄 예제 파일의 경우 루프는 다음 ed명령을 생성합니다.

1,2j
2,3j
3,4j
4,5j

마지막 명령 은 파일을 디스크에 쓰고 종료(exit)하도록 echo지시합니다 .ed

이 방법은 인접한 행 사이에 공백을 추가하지 않으므로 탭을 추가해야 하는 경우 기존 행 앞에 이 행을 추가하여 탭을 삽입해야 합니다 printf.

        printf '%ds/$/  /\n' "$line"

대체 텍스트에 표시되는 공백은 탭 문자입니다( , 로 입력 Control-V) TAB.

관련 정보