단일 열에 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)를 찾고 있습니다.
sed
gnu 를 사용한다면 충분합니다 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.