몇시간동안 이것저것 하려고 했는데
이 데이터가 포함된 파일이 있습니다. 이를 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/^ *//' )
여기서 프로세스 대체는 를 <( ... )
대체합니다 -
.