단일 열에 X 행이 있는 파일이 있고 각 짝수/홀수 행을 새 열에 인쇄하고 싶습니다. vim
Linux나 편집기에서 이것이 가능합니까?
예를 들어:
입력 파일:
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 확장은 첫 번째 줄부터 시작하는 모든 단계 줄과 일치합니다. 특히, 현재 행 번호가 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.