다른 파일의 줄 끝에 파일이나 명령을 추가합니다.

다른 파일의 줄 끝에 파일이나 명령을 추가합니다.

몇시간동안 이것저것 하려고 했는데

이 데이터가 포함된 파일이 있습니다. 이를 data1이라고 부르겠습니다.

test1,test2,test3

해당 데이터 행 끝에 개수와 쉼표를 추가하고 싶습니다. data1의 행 수, 즉 1행을 세고 있다고 가정해 보겠습니다.

echo ", $(wc -l < data1 | bc)"

내 출력은 다음과 같습니다.

test1,test2,test3,1

나는 echo, printf, some awk(아직도 이해가 잘 안 됨), cat을 시도해 보았습니다.

답변1

awk를 사용하세요

awk '{$0=$0","NR}1' data1

답변2

POSIX 파일을 가정하면 echo "$(head -c-1 data1)","$(wc -l <data1)"원하는 내용이 출력됩니다. head후행 줄 바꿈을 제거하십시오.

답변3

sed를 사용하여 마지막 줄에 숫자를 추가합니다.

STRING=`echo "$(wc -l < data1 | bc)"` && sed -i '$s/^\(.*\)$/\1,'"$STRING"'/' data1
$ cat data1 
test1,test2,test3,1

첫 번째 부분은 줄 번호를 변수에 저장하고 STRING, sed는 마지막 줄을 가져와 변수 ,의 내용을 $STRING줄 끝에 추가합니다.

답변4

paste명령은 열을 추가하는 데 사용됩니다.

$ wc -l <data1 | paste -d, file -
test1,test2,test3,       1

이것은문자 그대로요청한 내용은 wc파일 줄 끝에 추가됩니다. 출력의 wc줄 시작 부분에 공백이 있으므로 여기서 공백을 얻습니다.

이 공백을 제거하려면:

$ wc -l <data1 | sed 's/^ *//' | paste -d, file -
test1,test2,test3,1

paste여기에 사용된 명령은 -d,이전 열과 새 열 사이에 쉼표를 삽입하도록 합니다. 이 -신호는 파일 대신 표준 입력에서 새 열을 읽어야 함을 나타냅니다. 표준 입력은 wc -l파일의 줄 수를 계산하여 제공됩니다.

변형은 출력을 sed가져와 wc줄 시작 부분의 모든 공백 문자를 제거합니다.


bash프로세스 대체 사용 :

paste -d, file <( wc -l <data1 | sed 's/^ *//' )

여기서 프로세스 대체는 를 <( ... )대체합니다 -.

관련 정보