새 열에 짝수/홀수 줄을 인쇄합니다.

새 열에 짝수/홀수 줄을 인쇄합니다.

단일 열에 X 줄의 줄이 있는 파일이 있고 모든 짝수/홀수 줄을 새 열에 인쇄하고 싶습니다. Linux나 vim편집기에서 이것이 가능합니까?

예를 들어:

입력 파일:

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 확장은 line first로 시작하는 모든 단계 행과 일치합니다. 특히, 현재 line-number가 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

마지막 echo명령은 단순히 ed파일을 디스크에 쓰고 종료(종료)하라는 명령입니다.

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

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

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

관련 정보