여러 파일의 특정 줄에 시퀀스 번호 추가

여러 파일의 특정 줄에 시퀀스 번호 추가

파일의 특정 줄에 일련 번호를 추가하고 다른 파일에 추가하는 명령을 알려줄 수 있는 사람이 있습니까?

예: 5개의 파일(메시지)이 있습니다. 각 메시지 파일의 5번째 줄에 제목: 1, 제목: 2, 제목: 3...과 같은 증분 시퀀스 번호를 추가하고 싶습니다. 샘플 출력은 다음과 같습니다.

File1: line5: Subject: **1** message
File2: line5: Subject: **2** message
File3: line5: Subject: **3** message
File4: line5: Subject: **4** message
File5: line5: Subject: **5** message

답변1

다음 명령을 사용해 보았더니 정상적으로 작동했습니다.

for i in 5; do sed -i ''$i'i subject '$i'' file1;j=$(($i+1)); sed -i  ''$i'i subject '$j'' file2;k=$(($j+1)); sed -i ''$i'i subject '$k' ' file3;l=$(($k+1));sed -i ''$i'i subject '$l'' file4;m=$(($l+1)); sed -i ''$i'i subject '$m'' file5;done

답변2

나는 다음을 사용할 것이다 perl:

perl -pi -e 's/^Subject: \K/sprintf("%05d ", ++$n)/e' File*

Subject:줄이 나타날 때마다 증가하는 숫자(너비 5까지 패딩 0)가 추가됩니다.

첫 번째 발생에만 해당:

perl -pi -e '
  unless ($found_already) {
    $found_already = 1 if s/^Subject: \K/sprintf("%05d ", ++$n)/e
  }
  $found_already = 0 if eof' File*

Subject: <increasing-number>각 파일의 5번째 줄에 추가하려면 :

perl -pi -e '$_ = sprintf("Subject: %05d %s", ++$n, $_) if $. == 5; 
             close ARGV if eof' File*

파일은 쉘의 glob 확장에 따라 결정된 순서대로 Perl에 제공됩니다. 대부분의 쉘에서는 이것이 어휘 순서입니다. 파일 이름 번호가 채워지지 않은 경우 File10이는 에 표시된다는 의미입니다 File2. zsh셸을 사용하면 숫자로 정렬된 목록 File*으로 바꾸거나 파일의 수명(가장 오래된 것부터 가장 어린 것까지)으로 정렬할 수 있습니다.File*(n)File*(Om)

관련 정보